From:             [EMAIL PROTECTED]
Operating system: mandrake linux
PHP version:      4.1.1
PHP Bug Type:     Feature/Change Request
Bug description:  shmop_write(): never writes the null char

I have a simple script that I'm trying to write/read to shared memory w/
the shmop_* functions.  The problem is
that it ALWAYS gives me php warnings when reading the
value from shared memory.  Doing some digging in the code
it seems that shmop_write always copies a string to 
shared memory, but it NEVER null terminates it.  This ALWAYS
causes shmop_read to report php warnings of 


Warning: String is not zero-terminated (5̏***@) (source:
zend_execute_API.c:274) in Unknown on line 0


I can't turn warnings off, just to avoid this issue.  I need
warnings on for debugging of the rest of my site.  MY question is,
shouldn't shmop_write() always memcopy the stringlen + the NULL character,
so when u do a read, this doesn't happen?  I know, then u always have to
add 1 to the shmop_read(), but isn't that normal to assume u'd want the
strlen + 1 for the null char?  

Here is my script
<?php


function xmp_var_dump( $var ) {
    echo "<xmp>\n";
    var_dump( $var );
    echo "</xmp>\n";
}


$key = 0x0ff;

$semid = sem_get ( $key, 1, 0666 );
if ( !sem_acquire( $semid ) ) {
    echo "Can't acquire semaphore<BR>";
    exit;
}

$size = 100;


$shmid = shmop_open( $key, 'c', 0, 0 );
//shmop_delete($shmid);
//shmop_close($shmid);
//exit;

if ( $shmid == '' ) {
    // Get register size:
    // Create shared memory block
    $shmid = shmop_open( $key, 'c', 0666, $size );
    xmp_var_Dump( $shmid );

    if ( $shmid == '' ) {
        echo "mem.mem: Can't create shared memory";
    } else {
        //  Set Header Info:
        xmp_var_dump( "writing test");
        shmop_write( $shmid, 5, 0 ); 
    }
} else {
    $var = shmop_read( $shmid, 0, 1);
    xmp_var_dump( $var );
}

shmop_close($shmid);

if( !sem_release( $semid ) ) {
    echo "find: Can't release semaphore";
    exit();
}

?>





Warning: shmopen: can't get the block in
/home/waboring/devel/current/php/fo/shmem/example3.php on line 22
int(2) string(12) "writing test"
Warning: shwrite: write (5), len = 1 in
/home/waboring/devel/current/php/fo/shmem/example3.php on line 38
-- 
Edit bug report at http://bugs.php.net/?id=15527&edit=1
-- 
Fixed in CVS:        http://bugs.php.net/fix.php?id=15527&r=fixedcvs
Fixed in release:    http://bugs.php.net/fix.php?id=15527&r=alreadyfixed
Need backtrace:      http://bugs.php.net/fix.php?id=15527&r=needtrace
Try newer version:   http://bugs.php.net/fix.php?id=15527&r=oldversion
Not developer issue: http://bugs.php.net/fix.php?id=15527&r=support
Expected behavior:   http://bugs.php.net/fix.php?id=15527&r=notwrong
Not enough info:     http://bugs.php.net/fix.php?id=15527&r=notenoughinfo
Submitted twice:     http://bugs.php.net/fix.php?id=15527&r=submittedtwice

Reply via email to