Fossil SCM
Call fossil_fatal() in svn import when trying to import an empty blob, rather than stepping on NULL later. Reported in [forum:15d4b242bda2a108|forum post 15d4b242bda2a108].
Commit
05ae1fe2fedcec7bd48b20f30ea8d95f3dbeb1dff83982e43489e7b90f29b6b3
Parent
d700ebff8e25e52…
1 file changed
+7
-1
+7
-1
| --- src/import.c | ||
| +++ src/import.c | ||
| @@ -1248,11 +1248,17 @@ | ||
| 1248 | 1248 | zOut = blob_buffer(pOut)+lenOld; |
| 1249 | 1249 | while( zDiff<zInst+lenInst ){ |
| 1250 | 1250 | u64 lenCpy = (*zDiff)&0x3f; |
| 1251 | 1251 | const char *zCpy; |
| 1252 | 1252 | switch( (*zDiff)&0xC0 ){ |
| 1253 | - case 0x00: zCpy = blob_buffer(pSrc)+offSrc; break; | |
| 1253 | + case 0x00: | |
| 1254 | + if( 0==blob_size(pSrc) ){ | |
| 1255 | + /* https://fossil-scm.org/forum/forumpost/15d4b242bda2a108 */ | |
| 1256 | + fossil_fatal("Don't know how to handle NULL input"); | |
| 1257 | + } | |
| 1258 | + zCpy = blob_buffer(pSrc)+offSrc; | |
| 1259 | + break; | |
| 1254 | 1260 | case 0x40: zCpy = blob_buffer(pOut); break; |
| 1255 | 1261 | case 0x80: zCpy = zData; break; |
| 1256 | 1262 | default: fossil_fatal("Invalid svndiff0 instruction"); |
| 1257 | 1263 | } |
| 1258 | 1264 | zDiff++; |
| 1259 | 1265 |
| --- src/import.c | |
| +++ src/import.c | |
| @@ -1248,11 +1248,17 @@ | |
| 1248 | zOut = blob_buffer(pOut)+lenOld; |
| 1249 | while( zDiff<zInst+lenInst ){ |
| 1250 | u64 lenCpy = (*zDiff)&0x3f; |
| 1251 | const char *zCpy; |
| 1252 | switch( (*zDiff)&0xC0 ){ |
| 1253 | case 0x00: zCpy = blob_buffer(pSrc)+offSrc; break; |
| 1254 | case 0x40: zCpy = blob_buffer(pOut); break; |
| 1255 | case 0x80: zCpy = zData; break; |
| 1256 | default: fossil_fatal("Invalid svndiff0 instruction"); |
| 1257 | } |
| 1258 | zDiff++; |
| 1259 |
| --- src/import.c | |
| +++ src/import.c | |
| @@ -1248,11 +1248,17 @@ | |
| 1248 | zOut = blob_buffer(pOut)+lenOld; |
| 1249 | while( zDiff<zInst+lenInst ){ |
| 1250 | u64 lenCpy = (*zDiff)&0x3f; |
| 1251 | const char *zCpy; |
| 1252 | switch( (*zDiff)&0xC0 ){ |
| 1253 | case 0x00: |
| 1254 | if( 0==blob_size(pSrc) ){ |
| 1255 | /* https://fossil-scm.org/forum/forumpost/15d4b242bda2a108 */ |
| 1256 | fossil_fatal("Don't know how to handle NULL input"); |
| 1257 | } |
| 1258 | zCpy = blob_buffer(pSrc)+offSrc; |
| 1259 | break; |
| 1260 | case 0x40: zCpy = blob_buffer(pOut); break; |
| 1261 | case 0x80: zCpy = zData; break; |
| 1262 | default: fossil_fatal("Invalid svndiff0 instruction"); |
| 1263 | } |
| 1264 | zDiff++; |
| 1265 |