[#3006] mismatched quotation — "stevan apter" <apter@...>

ruby documentation uses a punctuation convention i've never seen

13 messages 2000/05/27

[ruby-talk:02628] Re: Few unrelated C-source questions

From: matz@... (Yukihiro Matsumoto)
Date: 2000-05-08 06:03:20 UTC
List: ruby-talk #2628
Hi,

In message "[ruby-talk:02624] Few unrelated C-source questions"
    on 00/05/08, Aleksi Niemel<aleksi.niemela@cinnober.com> writes:

|Should class.c's rb_scan_args initialize not provided optional arguments 
|to NoValue (subclass of Nil and/or evaluates like nil). Now it's impossible
|to differentiate was optional argument passed as Nil or was it missing
|and it was initialized automagically to Nil.

Currently use argc (or return value from rb_scan_args) to check number
of arguments.  I'd like to provide richer (but maybe slower) scan
function in the future.

|variable.c rb_autoload_load
|Untaints auto*magically*. Possible security problem?

No.  `autoload' cannot be called from untrusted code (see
rb_autoload_id(); rb_secure(4)).  So the file name can be trusted
anyway .  I explicitly untaint the string here because the loaded
filename string object may be tainted automatically.

|-----
|eval.c rb_provided
|Q: why rb_f_require treats libfile.so and libfile.o equal but rb_provided
|checks only for libfile.so.

Treating libfile.o specially is for backward compatibility.  After
requiring "socket.o" for example, feature name "socket.so" will be
registered.  Oops, I found a bug.  I want to register "*.so" uniformly
for all platforms but rb_f_require() uses native DLEXT extension to
provide().

|Could this be (not important) optimization?:
|	if (strcmp(f, feature) == 0) return Qtrue;
|	len = strlen(feature);
|	if (strncmp(f, feature, len) == 0
|	    && (strcmp(f+len, ".rb") == 0 ||strcmp(f+len, ".so") == 0)) {
|	    return Qtrue;
|	}
|
|Isn't first strncmp(f, feature, len) == 0 only if strcmp(f,feature) == 0.
|And in that case we have returned already.

No.  If you remove first strncmp(), "foo" will match "bar.rb".

|eval.c dln.c dln_load
|    char real_name[1024];
|    strcpy(real_name, initfuncname);
|    strcat(real_name, "__Fv");
|
|initfuncname is now always "Init_%200s", but maybe not in the future. So
|real_name could be to small for strcpy and strcat could cause overflow.
|real_name should probably be char real_name[MAXPATHLEN] which is used for
|initfuncname everywhere else.

Agreed.  I'll change it.

							matz.

In This Thread

Prev Next