Patch #1599 has been updated. Project: Category: libstore Status: Closed Summary: store_typed_open on file name doesn't call store_open
Follow-Ups: Date: Fri 08/01/2003 at 00:17 By: marcus Comment: This patch is definitely wrong. The code should do the following: FOO:BAR - Open the class FOO with parameter BAR FOO: - Open the class FOO with no parameter :BAR - Open the file BAR (with store_open) BAZ - Try to find a class BAZ, and open that with no parameter, but if class is not found, open file BAZ with store_open. Look at the code: const char *clname_end = strchrnul (name, ':'); if (clname_end == name) /* Open NAME with store_open. */ return store_open (name + 1, flags, classes, store); This covers the ":BAR" case. You make the code look in that case for a class "". Then come all the other cases, which (potentially) start with a class name. So we search for classes, either in the statically linked list, or by dynamically loading a library with that class. Only if that fails, and there is no ':', then we know we have a BAZ case where BAZ is not a class, but a file. Then open the file. I think the only bug here is that the dynamic loading mechanism segfaults, which you probably have fixed with your linker change. So I am closing this. If I overlooked something, we can reopen it. ------------------------------------------------------- Date: Fri 08/01/2003 at 11:29 By: ogi Comment: OK, next time I'll read the comment right before function ;-) I've found two new possible problems with the function. A new patch is uploaded that address them. Unfortunately, to completely test the patch, patched libc is required. When NAME is empty string, clname_end is equal to name. The first "if" thinks that the string begins with ':' and it will call store_open with name+1, which can possibly lead to SEGV and other undesirable behavior. store_module_open exits immediately with EINVAL if it doesn't find ':'. This means that if you pass file name without ':' and weak symbol store_module_open points to something, then the function will return with EINVAL instead of calling store_open. ------------------------------------------------------- ------------------------------------------------------- For more info, visit: http://savannah.gnu.org/patch/?func=detailpatch&patch_id=1599&group_id=30 _______________________________________________ Message sent via/by Savannah http://savannah.gnu.org/ _______________________________________________ Bug-hurd mailing list [EMAIL PROTECTED] http://mail.gnu.org/mailman/listinfo/bug-hurd