diff --git a/net/textproto.ts b/net/textproto.ts index 342d74b33e..832299e1c2 100644 --- a/net/textproto.ts +++ b/net/textproto.ts @@ -118,11 +118,12 @@ export class TextProtoReader { async readLineSlice(): Promise<[Uint8Array, BufState]> { // this.closeDot(); - let line: null | Uint8Array; + let line: Uint8Array; while (true) { let [l, more, err] = await this.r.readLine(); if (err != null) { - return [null, err]; + // Go's len(typed nil) works fine, but not in JS + return [new Uint8Array(0), err]; } // Avoid the copy if the first call produced a full line. if (line == null && !more) { diff --git a/net/textproto_test.ts b/net/textproto_test.ts index ad7e6a2c41..3af21247a6 100644 --- a/net/textproto_test.ts +++ b/net/textproto_test.ts @@ -93,3 +93,10 @@ test(async function textprotoAppend() { const joined = append(u1, u2); assertEqual(dec.decode(joined), "Hello World"); }); + +test(async function textprotoReadEmpty() { + let r = reader(""); + let [m, err] = await r.readMIMEHeader(); + // Should not crash! + assertEqual(err, "EOF"); +});