Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Changes In Branch clientSyncLeakFix Excluding Merge-Ins
This is equivalent to a diff from 0b61e3c019 to 7611406fd7
2012-01-24
| ||
13:28 | Fix several blob leaks that can lead to out of memory conditions for very large push operations. Revise the order of error messages so that simple HTTP timeout produces a better diagnostic. The HTTP trace files need to be opened in binary mode. check-in: 1e39808853 user: mistachkin tags: trunk | |
2012-01-22
| ||
06:52 | Make sure that autosetup ends up defining FOSSIL_ENABLE_TCL in the Makefile when necessary. check-in: 21555be397 user: mistachkin tags: trunk | |
2012-01-20
| ||
17:32 | The HTTP trace files need to be opened in binary mode. Closed-Leaf check-in: 7611406fd7 user: mistachkin tags: clientSyncLeakFix | |
17:16 | Revise the order of error messages so that simple HTTP timeout produces a better diagnostic. check-in: dd71069bfe user: mistachkin tags: clientSyncLeakFix | |
15:22 | Fix several blob leaks that can lead to out of memory conditions for very large push operations. check-in: 81c685e097 user: mistachkin tags: clientSyncLeakFix | |
2012-01-18
| ||
13:22 | Merge trunk changes into the retro-sbsdiff branch. check-in: 6daee94fac user: drh tags: retro-sbsdiff | |
13:21 | Add the ability to run TH1 scripts before and after each xfer request. check-in: 0b61e3c019 user: drh tags: trunk | |
12:56 | Add xfersetup to the makemake.tcl script. Closed-Leaf check-in: 9441f6fbcf user: mistachkin tags: pushScript | |
12:47 | Correct casing typos. check-in: 0c042ce7d1 user: mistachkin tags: trunk | |
Changes to src/http.c.
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
...
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
|
*/ if( g.fHttpTrace ){ static int traceCnt = 0; char *zOutFile; FILE *out; traceCnt++; zOutFile = mprintf("http-request-%d.txt", traceCnt); out = fopen(zOutFile, "w"); if( out ){ fwrite(blob_buffer(&hdr), 1, blob_size(&hdr), out); fwrite(blob_buffer(&payload), 1, blob_size(&payload), out); fclose(out); } free(zOutFile); zOutFile = mprintf("http-reply-%d.txt", traceCnt); out = fopen(zOutFile, "w"); transport_log(out); free(zOutFile); } /* ** Send the request to the server. */ ................................................................................ "application/x-fossil-uncompressed", -1)==0 ){ isCompressed = 0; }else if( fossil_strnicmp(&zLine[14], "application/x-fossil", -1)!=0 ){ isError = 1; } } } if( rc!=200 ){ fossil_warning("\"location:\" missing from 302 redirect reply"); goto write_err; } /* ** Extract the reply payload that follows the header */ if( iLength<0 ){ fossil_fatal("server did not reply"); goto write_err; } blob_zero(pReply); blob_resize(pReply, iLength); iLength = transport_receive(blob_buffer(pReply), iLength); blob_resize(pReply, iLength); if( isError ){ char *z; int i, j; |
|
|
>
>
>
>
<
<
<
<
|
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
...
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
|
*/ if( g.fHttpTrace ){ static int traceCnt = 0; char *zOutFile; FILE *out; traceCnt++; zOutFile = mprintf("http-request-%d.txt", traceCnt); out = fopen(zOutFile, "wb"); if( out ){ fwrite(blob_buffer(&hdr), 1, blob_size(&hdr), out); fwrite(blob_buffer(&payload), 1, blob_size(&payload), out); fclose(out); } free(zOutFile); zOutFile = mprintf("http-reply-%d.txt", traceCnt); out = fopen(zOutFile, "wb"); transport_log(out); free(zOutFile); } /* ** Send the request to the server. */ ................................................................................ "application/x-fossil-uncompressed", -1)==0 ){ isCompressed = 0; }else if( fossil_strnicmp(&zLine[14], "application/x-fossil", -1)!=0 ){ isError = 1; } } } if( iLength<0 ){ fossil_fatal("server did not reply"); goto write_err; } if( rc!=200 ){ fossil_warning("\"location:\" missing from 302 redirect reply"); goto write_err; } /* ** Extract the reply payload that follows the header */ blob_zero(pReply); blob_resize(pReply, iLength); iLength = transport_receive(blob_buffer(pReply), iLength); blob_resize(pReply, iLength); if( isError ){ char *z; int i, j; |
Changes to src/xfer.c.
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 ... 154 155 156 157 158 159 160 161 162 163 164 165 166 167 ... 233 234 235 236 237 238 239 240 241 242 243 244 245 246 ... 418 419 420 421 422 423 424 425 426 427 428 429 430 431 |
return; } blob_zero(&content); blob_zero(&hash); blob_extract(pXfer->pIn, n, &content); if( !cloneFlag && uuid_is_shunned(blob_str(&pXfer->aToken[1])) ){ /* Ignore files that have been shunned */ return; } if( isPriv && !g.perm.Private ){ /* Do not accept private files if not authorized */ return; } if( cloneFlag ){ if( pXfer->nToken==4 ){ srcid = rid_from_uuid(&pXfer->aToken[2], 1, isPriv); pXfer->nDeltaRcvd++; }else{ ................................................................................ srcid = rid_from_uuid(&pXfer->aToken[2], 1, isPriv); if( content_get(srcid, &src)==0 ){ rid = content_put_ex(&content, blob_str(&pXfer->aToken[1]), srcid, 0, isPriv); pXfer->nDanglingFile++; db_multi_exec("DELETE FROM phantom WHERE rid=%d", rid); if( !isPriv ) content_make_public(rid); return; } pXfer->nDeltaRcvd++; blob_delta_apply(&src, &content, &next); blob_reset(&src); blob_reset(&content); content = next; ................................................................................ /* Do not accept private files if not authorized */ return; } blob_zero(&content); blob_extract(pXfer->pIn, szC, &content); if( uuid_is_shunned(blob_str(&pXfer->aToken[1])) ){ /* Ignore files that have been shunned */ return; } if( pXfer->nToken==5 ){ srcid = rid_from_uuid(&pXfer->aToken[2], 1, isPriv); pXfer->nDeltaRcvd++; }else{ srcid = 0; ................................................................................ if( isPriv ) blob_append(pXfer->pOut, "private\n", -1); blob_appendf(pXfer->pOut, "file %b %d\n", pUuid, size); blob_append(pXfer->pOut, blob_buffer(&content), size); pXfer->nFileSent++; }else{ pXfer->nDeltaSent++; } } remote_has(rid); blob_reset(&uuid); #if 0 if( blob_buffer(pXfer->pOut)[blob_size(pXfer->pOut)-1]!='\n' ){ blob_appendf(pXfer->pOut, "\n", 1); } |
> > > > > > |
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 ... 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 ... 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 ... 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 |
return; } blob_zero(&content); blob_zero(&hash); blob_extract(pXfer->pIn, n, &content); if( !cloneFlag && uuid_is_shunned(blob_str(&pXfer->aToken[1])) ){ /* Ignore files that have been shunned */ blob_reset(&content); return; } if( isPriv && !g.perm.Private ){ /* Do not accept private files if not authorized */ blob_reset(&content); return; } if( cloneFlag ){ if( pXfer->nToken==4 ){ srcid = rid_from_uuid(&pXfer->aToken[2], 1, isPriv); pXfer->nDeltaRcvd++; }else{ ................................................................................ srcid = rid_from_uuid(&pXfer->aToken[2], 1, isPriv); if( content_get(srcid, &src)==0 ){ rid = content_put_ex(&content, blob_str(&pXfer->aToken[1]), srcid, 0, isPriv); pXfer->nDanglingFile++; db_multi_exec("DELETE FROM phantom WHERE rid=%d", rid); if( !isPriv ) content_make_public(rid); blob_reset(&src); blob_reset(&content); return; } pXfer->nDeltaRcvd++; blob_delta_apply(&src, &content, &next); blob_reset(&src); blob_reset(&content); content = next; ................................................................................ /* Do not accept private files if not authorized */ return; } blob_zero(&content); blob_extract(pXfer->pIn, szC, &content); if( uuid_is_shunned(blob_str(&pXfer->aToken[1])) ){ /* Ignore files that have been shunned */ blob_reset(&content); return; } if( pXfer->nToken==5 ){ srcid = rid_from_uuid(&pXfer->aToken[2], 1, isPriv); pXfer->nDeltaRcvd++; }else{ srcid = 0; ................................................................................ if( isPriv ) blob_append(pXfer->pOut, "private\n", -1); blob_appendf(pXfer->pOut, "file %b %d\n", pUuid, size); blob_append(pXfer->pOut, blob_buffer(&content), size); pXfer->nFileSent++; }else{ pXfer->nDeltaSent++; } blob_reset(&content); } remote_has(rid); blob_reset(&uuid); #if 0 if( blob_buffer(pXfer->pOut)[blob_size(pXfer->pOut)-1]!='\n' ){ blob_appendf(pXfer->pOut, "\n", 1); } |