iCheck that non-binary types end with ".\r\n" - sacc - sacc(omys), simple console gopher client Err bitreich.org 70 hgit clone git://bitreich.org/sacc/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/sacc/ URL:git://bitreich.org/sacc/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/sacc/ bitreich.org 70 1Log /scm/sacc/log.gph bitreich.org 70 1Files /scm/sacc/files.gph bitreich.org 70 1Refs /scm/sacc/refs.gph bitreich.org 70 1Tags /scm/sacc/tag bitreich.org 70 1LICENSE /scm/sacc/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 1commit 34fd4f17068b408353bb6ae1df3eb4a58c259e25 /scm/sacc/commit/34fd4f17068b408353bb6ae1df3eb4a58c259e25.gph bitreich.org 70 1parent cd386e712b7587740115c0fb0815a43052758ae2 /scm/sacc/commit/cd386e712b7587740115c0fb0815a43052758ae2.gph bitreich.org 70 hAuthor: Quentin Rameau URL:mailto:quinq@fifth.space bitreich.org 70 iDate: Sat, 30 Jan 2021 19:44:16 +0100 Err bitreich.org 70 i Err bitreich.org 70 iCheck that non-binary types end with ".\r\n" Err bitreich.org 70 i Err bitreich.org 70 iOtherwise that means that the remote end send incomplete data. Err bitreich.org 70 i Err bitreich.org 70 iThanks to jhumphrey for spotting that! Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M sacc.c | 13 +++++++++---- Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 9 insertions(+), 4 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/sacc.c b/sacc.c /scm/sacc/file/sacc.c.gph bitreich.org 70 i@@ -599,20 +599,25 @@ cleanup: Err bitreich.org 70 i static int Err bitreich.org 70 i fetchitem(Item *item) Err bitreich.org 70 i { Err bitreich.org 70 i+ char *raw, *r; Err bitreich.org 70 i int sock; Err bitreich.org 70 i Err bitreich.org 70 i if ((sock = connectto(item->host, item->port)) < 0 || Err bitreich.org 70 i sendselector(sock, item->selector) < 0) Err bitreich.org 70 i return 0; Err bitreich.org 70 i- item->raw = getrawitem(sock); Err bitreich.org 70 i+ raw = getrawitem(sock); Err bitreich.org 70 i close(sock); Err bitreich.org 70 i Err bitreich.org 70 i- if (item->raw && !*item->raw) { Err bitreich.org 70 i+ if (raw == NULL || !*raw) { Err bitreich.org 70 i diag("Empty response from server"); Err bitreich.org 70 i- clear(&item->raw); Err bitreich.org 70 i+ clear(&raw); Err bitreich.org 70 i+ } else if ((r = strrchr(raw, '.')) == NULL || strcmp(r, ".\r\n")) { Err bitreich.org 70 i+ diag("Incomplete response from server"); Err bitreich.org 70 i+ } else { Err bitreich.org 70 i+ *r = '\0'; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i- return (item->raw != NULL); Err bitreich.org 70 i+ return ((item->raw = raw) != NULL); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i static void Err bitreich.org 70 .