diff options
| author | Mike Frysinger <vapier@google.com> | 2022-05-20 23:34:44 -0400 |
|---|---|---|
| committer | Mike Frysinger <vapier@google.com> | 2022-07-28 17:44:21 +0000 |
| commit | 5951e3043f8d9567bfcd6e0f328ae057e1dfad11 (patch) | |
| tree | 8fdf3cc7a4f94d2c862c22e19abec2ccab391032 /subcmds | |
| parent | 48ea25c6a7f9ca601dc23ca8e32cc2d0dd3f26c2 (diff) | |
| download | git-repo-5951e3043f8d9567bfcd6e0f328ae057e1dfad11.tar.gz | |
sync: handle smartsync HTML responses better
If the server responds with an HTML page, we should show that to the
user instead of crashing with XML errors.
Bug: https://crbug.com/gerrit/15936
Change-Id: I52e6b781c3bb6a6c9f6ecbe2e0907044876cdc8d
Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/337519
Reviewed-by: Raman Tenneti <rtenneti@google.com>
Tested-by: Mike Frysinger <vapier@google.com>
Diffstat (limited to 'subcmds')
| -rw-r--r-- | subcmds/sync.py | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/subcmds/sync.py b/subcmds/sync.py index 507d1c94..a2b376bc 100644 --- a/subcmds/sync.py +++ b/subcmds/sync.py | |||
| @@ -28,6 +28,7 @@ import time | |||
| 28 | import urllib.error | 28 | import urllib.error |
| 29 | import urllib.parse | 29 | import urllib.parse |
| 30 | import urllib.request | 30 | import urllib.request |
| 31 | import xml.parsers.expat | ||
| 31 | import xmlrpc.client | 32 | import xmlrpc.client |
| 32 | 33 | ||
| 33 | try: | 34 | try: |
| @@ -1431,11 +1432,16 @@ class PersistentTransport(xmlrpc.client.Transport): | |||
| 1431 | raise | 1432 | raise |
| 1432 | 1433 | ||
| 1433 | p, u = xmlrpc.client.getparser() | 1434 | p, u = xmlrpc.client.getparser() |
| 1434 | while 1: | 1435 | # Response should be fairly small, so read it all at once. |
| 1435 | data = response.read(1024) | 1436 | # This way we can show it to the user in case of error (e.g. HTML). |
| 1436 | if not data: | 1437 | data = response.read() |
| 1437 | break | 1438 | try: |
| 1438 | p.feed(data) | 1439 | p.feed(data) |
| 1440 | except xml.parsers.expat.ExpatError as e: | ||
| 1441 | raise IOError( | ||
| 1442 | f'Parsing the manifest failed: {e}\n' | ||
| 1443 | f'Please report this to your manifest server admin.\n' | ||
| 1444 | f'Here is the full response:\n{data.decode("utf-8")}') | ||
| 1439 | p.close() | 1445 | p.close() |
| 1440 | return u.close() | 1446 | return u.close() |
| 1441 | 1447 | ||
