Fossil SCM
Additional rebustness improvements for BOM handling.
Commit
9d962928718e95fbe43c10e06ab2db1e4e39a8965dbf8c372d1620b8c48a71b9
Parent
898d5b6de7436f6…
1 file changed
+4
-2
+4
-2
| --- src/blob.c | ||
| +++ src/blob.c | ||
| @@ -333,11 +333,13 @@ | ||
| 333 | 333 | blob_is_init(p); |
| 334 | 334 | if( p->nUsed==0 ){ |
| 335 | 335 | blob_append_char(p, 0); /* NOTE: Changes nUsed. */ |
| 336 | 336 | p->nUsed = 0; |
| 337 | 337 | } |
| 338 | - if( p->aData[p->nUsed]!=0 ){ | |
| 338 | + if( p->nUsed<p->nAlloc ){ | |
| 339 | + p->aData[p->nUsed] = 0; | |
| 340 | + }else{ | |
| 339 | 341 | blob_materialize(p); |
| 340 | 342 | } |
| 341 | 343 | return p->aData; |
| 342 | 344 | } |
| 343 | 345 | |
| @@ -1352,11 +1354,11 @@ | ||
| 1352 | 1354 | zUtf8[i] = zUtf8[i-1]; |
| 1353 | 1355 | zUtf8[--i] = zTemp; |
| 1354 | 1356 | } |
| 1355 | 1357 | } |
| 1356 | 1358 | /* Make sure the blob contains two terminating 0-bytes */ |
| 1357 | - blob_append_char(pBlob, 0); | |
| 1359 | + blob_append(pBlob, "\000\000", 3); | |
| 1358 | 1360 | zUtf8 = blob_str(pBlob) + bomSize; |
| 1359 | 1361 | zUtf8 = fossil_unicode_to_utf8(zUtf8); |
| 1360 | 1362 | blob_set_dynamic(pBlob, zUtf8); |
| 1361 | 1363 | }else if( useMbcs && invalid_utf8(pBlob) ){ |
| 1362 | 1364 | #if defined(_WIN32) || defined(__CYGWIN__) |
| 1363 | 1365 |
| --- src/blob.c | |
| +++ src/blob.c | |
| @@ -333,11 +333,13 @@ | |
| 333 | blob_is_init(p); |
| 334 | if( p->nUsed==0 ){ |
| 335 | blob_append_char(p, 0); /* NOTE: Changes nUsed. */ |
| 336 | p->nUsed = 0; |
| 337 | } |
| 338 | if( p->aData[p->nUsed]!=0 ){ |
| 339 | blob_materialize(p); |
| 340 | } |
| 341 | return p->aData; |
| 342 | } |
| 343 | |
| @@ -1352,11 +1354,11 @@ | |
| 1352 | zUtf8[i] = zUtf8[i-1]; |
| 1353 | zUtf8[--i] = zTemp; |
| 1354 | } |
| 1355 | } |
| 1356 | /* Make sure the blob contains two terminating 0-bytes */ |
| 1357 | blob_append_char(pBlob, 0); |
| 1358 | zUtf8 = blob_str(pBlob) + bomSize; |
| 1359 | zUtf8 = fossil_unicode_to_utf8(zUtf8); |
| 1360 | blob_set_dynamic(pBlob, zUtf8); |
| 1361 | }else if( useMbcs && invalid_utf8(pBlob) ){ |
| 1362 | #if defined(_WIN32) || defined(__CYGWIN__) |
| 1363 |
| --- src/blob.c | |
| +++ src/blob.c | |
| @@ -333,11 +333,13 @@ | |
| 333 | blob_is_init(p); |
| 334 | if( p->nUsed==0 ){ |
| 335 | blob_append_char(p, 0); /* NOTE: Changes nUsed. */ |
| 336 | p->nUsed = 0; |
| 337 | } |
| 338 | if( p->nUsed<p->nAlloc ){ |
| 339 | p->aData[p->nUsed] = 0; |
| 340 | }else{ |
| 341 | blob_materialize(p); |
| 342 | } |
| 343 | return p->aData; |
| 344 | } |
| 345 | |
| @@ -1352,11 +1354,11 @@ | |
| 1354 | zUtf8[i] = zUtf8[i-1]; |
| 1355 | zUtf8[--i] = zTemp; |
| 1356 | } |
| 1357 | } |
| 1358 | /* Make sure the blob contains two terminating 0-bytes */ |
| 1359 | blob_append(pBlob, "\000\000", 3); |
| 1360 | zUtf8 = blob_str(pBlob) + bomSize; |
| 1361 | zUtf8 = fossil_unicode_to_utf8(zUtf8); |
| 1362 | blob_set_dynamic(pBlob, zUtf8); |
| 1363 | }else if( useMbcs && invalid_utf8(pBlob) ){ |
| 1364 | #if defined(_WIN32) || defined(__CYGWIN__) |
| 1365 |