PHP 4.0 Bug #6559 Updated: yp_first() and yp_next() results handled wrong in ext/yp/yp.c

From: Date: Thu, 22 Mar 2001 14:57:51 +0000
Subject: PHP 4.0 Bug #6559 Updated: yp_first() and yp_next() results handled wrong in ext/yp/yp.c
Groups: php.dev 
Request: Send a blank email to php-dev+get-49744@lists.php.net to get a copy of this message
ID: 6559 User Update by: gert@gerts.net Status: Closed Bug Type: YP/NIS related Description: yp_first() and yp_next() results handled wrong in ext/yp/yp.c Reaction to [2001-03-18 17:05:11] ohrn@php.net's comment: You're wrong in saying that having a newline at the end of a key/value pair is dependent on the data you put in the map. Sure, if you put newlines in the map you'll bound to get them out; BUT there's allways an extra newline added. From the SunOS 7 and 8 manuals (ypclnt(3N)): [..] For each outkey and outval, two extra bytes of memory are allocated at the end that contain NEWLINE and null, respectively, but these two bytes are not reflected in outkeylen or outvallen . [..] Meaning for keys x and value y, you'll get: outkeylen = 1; outvallen = 1; outkey[] = { 0x78, 0x0a, 0x00 }; outval[] = { 0x79, 0x0a, 0x00 }; Which requires chopping off the newline in case you must use the key and value as a C string. The latter is precisely what php needs/does, the former was missing from the glue code. Proof me wrong ;-). I've observed the original code fail... Regards Gert Previous Comments: --------------------------------------------------------------------------- [2001-03-18 17:05:11] ohrn@php.net This depends on the data you put in the map in the first place. Properly created maps do not include linebreaks. It's not up to PHP to second guess the administrator of the YP domain. :) --------------------------------------------------------------------------- [2000-09-05 14:31:58] gert@gerts.net The key/value pairs that libnsl's yp_first/yp_next return contain a trailing NEWLINE as per NIS specs. These NEWLINEs are not chopped off before returning the key/value pair to the users's PHP code. Hence you end up with newlines in PHP hashes. Below is the context diff for the fix. regards, Gert *** yp.c.orig Mon Jun 5 21:47:45 2000 --- yp.c Tue Sep 5 19:37:54 2000 *************** *** 151,156 **** --- 151,158 ---- RETURN_FALSE; } array_init(return_value); + outkey[outkeylen] = 0; + outval[outvallen] = 0; add_assoc_string(return_value,"key",outkey,1); add_assoc_string(return_value,"value",outval,1); } *************** *** 175,180 **** --- 177,184 ---- RETURN_FALSE; } + outkey[outkeylen] = 0; + outval[outvallen] = 0; array_init(return_value); add_assoc_string(return_value,outkey,outval,1); } --------------------------------------------------------------------------- Full Bug description available at: http://bugs.php.net/?id=6559

« previous php.dev (#49744) next »