]> granicus.if.org Git - php/commitdiff
Fixed Bug #42163 (fgetcsv() gives different output with and without Unicode)
authorFelipe Pena <felipe@php.net>
Sun, 10 Feb 2008 02:13:37 +0000 (02:13 +0000)
committerFelipe Pena <felipe@php.net>
Sun, 10 Feb 2008 02:13:37 +0000 (02:13 +0000)
ext/standard/file.c

index 8a922b6b1a43d34753d18f2d70455d44afab87a5..e4a3ff640bf6b36ad5c368c884582d2bb06184d9 100644 (file)
@@ -2216,7 +2216,7 @@ PHP_FUNCTION(fgetcsv)
        if (len < 0) {
                buf.v = php_stream_get_line_ex(stream, stream->readbuf_type, NULL_ZSTR, 0, 0, &buf_len);
        } else {
-               buf.v = stream->readbuf_type == IS_UNICODE ? emalloc(UBYTES(len + 1)) : emalloc(len + 1);
+               buf.v = stream->readbuf_type == IS_UNICODE ? eumalloc(len + 1) : emalloc(len + 1);
                if (php_stream_get_line_ex(stream, stream->readbuf_type, buf, len + 1, len + 1, &buf_len) == NULL) {
                        efree(buf.v);
                        RETVAL_FALSE;
@@ -2541,7 +2541,7 @@ ready_state:
                                if (*p == '\r' || *p == '\n') {
                                        /* Terminal delimiter, treat as empty field */
                                        p++;
-                                       add_next_index_stringl(return_value, "", 0, 1);
+                                       add_next_index_unicodel(return_value, (UChar*)"", 0, 1);
                                        break;
                                }
 
@@ -2595,7 +2595,7 @@ with_enc:
                                        /* Enclosure encountered, is it paired? */
                                        if (PHP_FGETCSV_UNI_CHECK(p + enclosure_len, e, enclosure, enclosure_len)) {
                                                /* Double enclosure gets translated to single enclosure */
-                                               memmove(p, p + enclosure_len, (e - p) - enclosure_len);
+                                               memmove(p, p + enclosure_len, UBYTES((e - p) - enclosure_len));
                                                e -= enclosure_len;
                                                p += enclosure_len;
                                                if (p >= e) break;
@@ -2672,7 +2672,7 @@ post_enc:
                                                int cruft_len = p - (field_end + enclosure_len);
 
                                                field = eumalloc(field_len + cruft_len + 1);
-                                               memcpy(field, field_start, field_len);
+                                               memcpy(field, field_start, UBYTES(field_len));
                                                memcpy(field + field_len, field_end + enclosure_len, UBYTES(cruft_len));
                                                field_len += cruft_len;
                                                field[field_len] = 0;