Fossil SCM

Resolve two 'db transaction never commits' warnings from /xfer in cases where it response to invalid inputs from the remote (found via libfossil testing).

stephan 2025-06-22 09:32 trunk
Commit bb8604921caf24e83b7f42459cda3d58c26e5efe30b9b2c1862ee20892ef9b0f
1 file changed +2
+2
--- src/xfer.c
+++ src/xfer.c
@@ -1523,10 +1523,11 @@
15231523
cgi_set_content_type("application/x-fossil-uncompressed");
15241524
}
15251525
blob_is_int(&xfer.aToken[2], &seqno);
15261526
if( seqno<=0 ){
15271527
xfer_fatal_error("invalid clone sequence number");
1528
+ db_rollback_transaction();
15281529
return;
15291530
}
15301531
max = db_int(0, "SELECT max(rid) FROM blob");
15311532
while( xfer.mxSend>(int)blob_size(xfer.pOut) && seqno<=max){
15321533
if( time(NULL) >= xfer.maxTime ) break;
@@ -1598,10 +1599,11 @@
15981599
&& blob_is_int(&xfer.aToken[2], &size) ){
15991600
const char *zName = blob_str(&xfer.aToken[1]);
16001601
Blob content;
16011602
if( size<0 ){
16021603
xfer_fatal_error("invalid config record");
1604
+ db_rollback_transaction();
16031605
return;
16041606
}
16051607
blob_zero(&content);
16061608
blob_extract(xfer.pIn, size, &content);
16071609
if( !g.perm.Admin ){
16081610
--- src/xfer.c
+++ src/xfer.c
@@ -1523,10 +1523,11 @@
1523 cgi_set_content_type("application/x-fossil-uncompressed");
1524 }
1525 blob_is_int(&xfer.aToken[2], &seqno);
1526 if( seqno<=0 ){
1527 xfer_fatal_error("invalid clone sequence number");
 
1528 return;
1529 }
1530 max = db_int(0, "SELECT max(rid) FROM blob");
1531 while( xfer.mxSend>(int)blob_size(xfer.pOut) && seqno<=max){
1532 if( time(NULL) >= xfer.maxTime ) break;
@@ -1598,10 +1599,11 @@
1598 && blob_is_int(&xfer.aToken[2], &size) ){
1599 const char *zName = blob_str(&xfer.aToken[1]);
1600 Blob content;
1601 if( size<0 ){
1602 xfer_fatal_error("invalid config record");
 
1603 return;
1604 }
1605 blob_zero(&content);
1606 blob_extract(xfer.pIn, size, &content);
1607 if( !g.perm.Admin ){
1608
--- src/xfer.c
+++ src/xfer.c
@@ -1523,10 +1523,11 @@
1523 cgi_set_content_type("application/x-fossil-uncompressed");
1524 }
1525 blob_is_int(&xfer.aToken[2], &seqno);
1526 if( seqno<=0 ){
1527 xfer_fatal_error("invalid clone sequence number");
1528 db_rollback_transaction();
1529 return;
1530 }
1531 max = db_int(0, "SELECT max(rid) FROM blob");
1532 while( xfer.mxSend>(int)blob_size(xfer.pOut) && seqno<=max){
1533 if( time(NULL) >= xfer.maxTime ) break;
@@ -1598,10 +1599,11 @@
1599 && blob_is_int(&xfer.aToken[2], &size) ){
1600 const char *zName = blob_str(&xfer.aToken[1]);
1601 Blob content;
1602 if( size<0 ){
1603 xfer_fatal_error("invalid config record");
1604 db_rollback_transaction();
1605 return;
1606 }
1607 blob_zero(&content);
1608 blob_extract(xfer.pIn, size, &content);
1609 if( !g.perm.Admin ){
1610

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button