python: Ignore EPIPE in hredir and serve-ssi.
authorFredrik Tolf <fredrik@dolda2000.com>
Tue, 12 Apr 2011 07:34:05 +0000 (09:34 +0200)
committerFredrik Tolf <fredrik@dolda2000.com>
Tue, 12 Apr 2011 07:34:05 +0000 (09:34 +0200)
python/htredir
python/serve-ssi

index f0e9070..1e03499 100755 (executable)
@@ -53,7 +53,10 @@ else:
     # Illegal, but the only option (the premises are illegal anyway)
     pass
 
-sys.stdout.write("HTTP/1.1 %s\n" % status)
-sys.stdout.write("Location: %s\n" % target)
-sys.stdout.write("Content-Length: 0\n")
-sys.stdout.write("\n")
+try:
+    sys.stdout.write("HTTP/1.1 %s\n" % status)
+    sys.stdout.write("Location: %s\n" % target)
+    sys.stdout.write("Content-Length: 0\n")
+    sys.stdout.write("\n")
+except IOError:
+    sys.exit(1)
index bbf7188..abdb701 100755 (executable)
@@ -151,16 +151,22 @@ if rest != "":
     sys.exit(0)
 
 try:
-    f = ssifile(open(path), url, path)
-except Exception:
-    simpleerror(sys.stdout, 500, "Server Error", "The server could not access its data.")
+    try:
+        f = ssifile(open(path), url, path)
+    except Exception:
+        simpleerror(sys.stdout, 500, "Server Error", "The server could not access its data.")
+        sys.exit(1)
+    try:
+        sys.stdout.write("HTTP/1.1 200 OK\n")
+        sys.stdout.write("Content-Type: text/html\n")
+        sys.stdout.write("\n")
+        f.initvars(ssivars)
+        f.process()
+    finally:
+        f.close()
+except IOError:
+    # This is for catching EPIPE, when the client has closed the
+    # connection. This shouldn't *really* be necessary since the
+    # process should terminate with SIGPIPE, but apparently Python
+    # ignores that.
     sys.exit(1)
-try:
-    sys.stdout.write("HTTP/1.1 200 OK\n")
-    sys.stdout.write("Content-Type: text/html\n")
-    sys.stdout.write("\n")
-    f.initvars(ssivars)
-    f.process()
-finally:
-    f.close()
-