From 05af6d32e67e92f4bcc21c337acf66c7eb05a3cd Mon Sep 17 00:00:00 2001 From: Fumitoshi UKAI Date: Wed, 30 Jan 2002 15:08:48 +0000 Subject: [w3m-dev 02933] segmentation fault when w3m -dump https: * file.c (readHeader): use inputAnswer() * file.c (getAuthCookie): remove term_cbreak() * file.c (checkOverWrite): use inputAnswer() * file.c (inputAnswer): added * istream.c (ssl_get_certificate): use inputAnswer() * main.c (qquitfm): change prompt * proto.h (inputAnswer): added From: Hironori Sakamoto --- ChangeLog | 13 ++++++++++++- file.c | 51 ++++++++++++++++++++++++++++++--------------------- istream.c | 23 ++++++++++------------- main.c | 6 +++--- proto.h | 3 ++- 5 files changed, 57 insertions(+), 39 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3008938..b318733 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2002-01-31 Hironori Sakamoto + + * [w3m-dev 02933] segmentation fault when w3m -dump https: + * file.c (readHeader): use inputAnswer() + * file.c (getAuthCookie): remove term_cbreak() + * file.c (checkOverWrite): use inputAnswer() + * file.c (inputAnswer): added + * istream.c (ssl_get_certificate): use inputAnswer() + * main.c (qquitfm): change prompt + * proto.h (inputAnswer): added + 2002-01-30 Hironori Sakamoto * [w3m-dev 02931] use POST in multipart.cgi @@ -2410,4 +2421,4 @@ * release-0-2-1 * import w3m-0.2.1 -$Id: ChangeLog,v 1.276 2002/01/30 04:42:38 ukai Exp $ +$Id: ChangeLog,v 1.277 2002/01/30 15:08:48 ukai Exp $ diff --git a/file.c b/file.c index ae75b6d..4a3b089 100644 --- a/file.c +++ b/file.c @@ -1,4 +1,4 @@ -/* $Id: file.c,v 1.50 2002/01/30 04:25:02 ukai Exp $ */ +/* $Id: file.c,v 1.51 2002/01/30 15:08:48 ukai Exp $ */ #include "fm.h" #include #include "myctype.h" @@ -731,16 +731,14 @@ readHeader(URLFile *uf, Buffer *newBuf, int thru, ParsedURL *pu) ? "y" : NULL; if (fmInitialized && (err & COO_OVERRIDE_OK) && accept_bad_cookie == ACCEPT_BAD_COOKIE_ASK) { - Str msg = - Sprintf - ("Accept bad cookie from %s for %s? (y or n) ", - pu->host, - domain - && domain->ptr ? domain->ptr : ""); - if (msg->length > COLS - 4) - Strshrink(msg, msg->length - (COLS - 4)); - term_raw(); - ans = inputChar(msg->ptr); + Str msg = Sprintf("Accept bad cookie from %s for %s?", + pu->host, + ((domain && domain->ptr) + ? domain->ptr : "")); + if (msg->length > COLS - 10) + Strshrink(msg, msg->length - (COLS - 10)); + Strcat_charp(msg, " (y/n)"); + ans = inputAnswer(msg->ptr); } if (ans == NULL || tolower(*ans) != 'y' || (err = @@ -1222,7 +1220,6 @@ getAuthCookie(struct http_auth *hauth, char *auth_header, IN_PASSWORD)) == NULL) return NULL; pwd = Str_conv_to_system(Strnew_charp(pp)); - term_cbreak(); } else { int proxy = !strncasecmp("Proxy-Authorization:", auth_header, @@ -6393,22 +6390,34 @@ int checkOverWrite(char *path) { struct stat st; - char buf[2]; - char *ans = NULL; + char *ans; if (stat(path, &st) < 0) return 0; + ans = inputAnswer("File exists. Overwrite? (y/n)"); + if (ans && tolower(*ans) == 'y') + return 0; + else + return -1; +} + +char * +inputAnswer(char *prompt) +{ + char *ans; + char buf[2]; + if (fmInitialized) { - ans = inputChar("File exists. Overwrite? (y or n)"); + term_raw(); + ans = inputChar(prompt); } else { - printf("File exists. Overwrite? (y or n)"); - ans = fgets(buf, 2, stdin); + printf(prompt); + fflush(stdout); + fgets(buf, 2, stdin); + ans = allocStr(buf, 1); } - if (ans != NULL && (*ans == '\0' || tolower(*ans) == 'y')) - return 0; - else - return -1; + return ans; } static void diff --git a/istream.c b/istream.c index 7f92b57..0239b5a 100644 --- a/istream.c +++ b/istream.c @@ -1,4 +1,4 @@ -/* $Id: istream.c,v 1.11 2002/01/12 13:33:47 ukai Exp $ */ +/* $Id: istream.c,v 1.12 2002/01/30 15:08:48 ukai Exp $ */ #include "fm.h" #include "istream.h" #include @@ -476,11 +476,10 @@ ssl_get_certificate(InputStream stream, char *hostname) && strcasecmp(accept_this_site->ptr, hostname) == 0) ans = "y"; else { - emsg = Strnew_charp("No SSL peer certificate: accept (y/n)?"); - term_raw(); - ans = inputChar(emsg->ptr); + emsg = Strnew_charp("No SSL peer certificate: accept? (y/n)"); + ans = inputAnswer(emsg->ptr); } - if (tolower(*ans) == 'y') + if (ans && tolower(*ans) == 'y') amsg = Strnew_charp ("Accept SSL session without any peer certificate"); else { @@ -510,11 +509,10 @@ ssl_get_certificate(InputStream stream, char *hostname) && strcasecmp(accept_this_site->ptr, hostname) == 0) ans = "y"; else { - emsg = Sprintf("%s: accept (y/n)?", em); - term_raw(); - ans = inputChar(emsg->ptr); + emsg = Sprintf("%s: accept? (y/n)", em); + ans = inputAnswer(emsg->ptr); } - if (tolower(*ans) == 'y') { + if (ans && tolower(*ans) == 'y') { amsg = Sprintf("Accept unsecure SSL session: " "unverified: %s", em); } @@ -537,11 +535,10 @@ ssl_get_certificate(InputStream stream, char *hostname) Str ep = Strdup(emsg); if (ep->length > COLS - 16) Strshrink(ep, ep->length - (COLS - 16)); - term_raw(); - Strcat_charp(ep, ": accept(y/n)?"); - ans = inputChar(ep->ptr); + Strcat_charp(ep, ": accept? (y/n)"); + ans = inputAnswer(ep->ptr); } - if (tolower(*ans) == 'y') { + if (ans && tolower(*ans) == 'y') { amsg = Strnew_charp("Accept unsecure SSL session:"); Strcat(amsg, emsg); } diff --git a/main.c b/main.c index 7d1b36d..627d89f 100644 --- a/main.c +++ b/main.c @@ -1,4 +1,4 @@ -/* $Id: main.c,v 1.73 2002/01/26 17:24:01 ukai Exp $ */ +/* $Id: main.c,v 1.74 2002/01/30 15:08:48 ukai Exp $ */ #define MAINPROGRAM #include "fm.h" #include @@ -2095,8 +2095,8 @@ qquitfm(void) char *ans; if (!confirm_on_quit) quitfm(); - ans = inputChar("Do you want to exit w3m? (y or n)"); - if (ans != NULL && tolower(*ans) == 'y') + ans = inputChar("Do you want to exit w3m? (y/n)"); + if (ans && tolower(*ans) == 'y') quitfm(); displayBuffer(Currentbuf, B_NORMAL); } diff --git a/proto.h b/proto.h index f74797d..788c896 100644 --- a/proto.h +++ b/proto.h @@ -1,4 +1,4 @@ -/* $Id: proto.h,v 1.30 2002/01/29 19:08:50 ukai Exp $ */ +/* $Id: proto.h,v 1.31 2002/01/30 15:08:48 ukai Exp $ */ /* * This file was automatically generated by version 1.7 of cextract. * Manual editing not recommended. @@ -184,6 +184,7 @@ extern void doFileSave(URLFile uf, char *defstr); extern int checkCopyFile(char *path1, char *path2); extern int checkSaveFile(InputStream stream, char *path); extern int checkOverWrite(char *path); +extern char *inputAnswer(char *prompt); extern int matchattr(char *p, char *attr, int len, Str *value); extern char *checkHeader(Buffer *buf, char *field); extern Buffer *newBuffer(int width); -- cgit v1.2.3