View Ticket
Not logged in
Ticket UUID: bfb8427cdd5b601486d532c378fba652d52af037
Title: Cloning and syncing an URL with no repository or misconfigured CGI repository fails silently.
Status: Open Type: Code_Defect
Severity: Severe Priority:
Subsystem: Resolution: Open
Last Modified: 2009-10-11 21:22:27
Version Found In: [0eb08b860c], [37f295c310], [b99aa66d1f]
Description & Comments:
If a CGI script lacks execution permissions by accident, cloning from it generates no error messages of any kind. All that happens is that an empty repository is created.

anonymous claiming to be Dmitry Chestnykh added on 2009-10-10 09:13:42:
There's no error reporting at all even for wrong URLs. I mistakenly used a wrong URL (.com instead of .org) for my server to clone/push/pull/sync and was wondering why it doesn't sync.

Here's an example session:

~ $ fossil clone http://example.com/404/ test
                Bytes      Cards  Artifacts     Deltas
Send:             597         24          0          0
Received:           0          0          0          0
Total network traffic: 447 bytes sent, 463 bytes received
Rebuilding repository meta-data...
0 (0%)...
project-id: (null)
server-id:  a3f3933d58f406f54a82902fb5b57b1e8d24a9af
admin-user: dmitry (password is "a666f9")

~ $ fossil open test

~ $ fossil sync http://example.com/NOTHING/ Bytes Cards Artifacts Deltas Send: 137 2 0 0 Received: 0 2 0 0 Total network traffic: 303 bytes sent, 467 bytes received


anonymous claiming to be Dmitry Chestnykh added on 2009-10-11 21:14:28:
I've tracked this down to http_exchange function in http.c. It correctly identifies non-200 HTTP responses:

      if( rc!=200 ) goto write_err;

However, it just goes to write_err where it simply closes the connection and doesn't output errors (perhaps, it should panic after closing the connection?), so Fossil just continues creating a new repository with zero data.


anonymous claiming to be Dmitry Chestnykh added on 2009-10-11 21:22:27:
Perhaps, something like this would do:

--- src/http.c
+++ src/http.c
@@ -235,7 +235,7 @@
   /*
   ** Jump to here if an error is seen.
   */
 write_err:
   transport_close();
-  return;
+  fossil_panic("bad server response");
 }