Re: [Lynx-dev] Adding $SOCKS5_PROXY support, changing command line option
>>> + socks5_proxy =3D (char*)-1; >> Don=E2=80=99t do that, that is not portable. > Really?? This i do not understand. Casting an integer, other than a compile-time constant expression with value 0, to a pointer? That is never portable. (char *)-1 could do anything from trapping immediately to producing a nil pointer to producing a pointer that happens to match something else in live use to, well, pretty much anything. C99 says (6.3.2.3) [#5] An integer may be converted to any pointer type. Exceptaspreviouslyspecified, the result is implementation-defined, might not be correctly aligned, might not point to an entity of the referenced type, and might be a trap representation.56) The "previously specified" text covers, in [#3], the "integer constant expression with value 0" case I mentioned above, in which case the conversion is required to yield a nil pointer (C99 calls this a null pointer; I don't like that name because of the confusion surrounding NULL - see http://ftp.rodents-montreal.org/mouse/blah/2009-10-09-1.html for my thoughts on that). ([#1], [#2], and [#4] cover conversions between various pointer types, not relevant to converting integers to pointers.) "[I]mplementation-defined" means, among other things, that the next implementation over may do something completely different from whatever it is you expect. Footnote 56 says 56)The mapping functions for converting a pointer to an integer or an integer to a pointer are intended to be consistent with the addressing structure of the execution environment. So, in summary, except for the null-pointer-constant special case, converting integers to pointers is intended to be useful in machine-dependent code, but is not portable beyond that. On most current systems, no, it won't cause trouble; it will do pretty much what you presumably expect. (While I didn't see enough context to really know what you expect, most such suggestions come from a mindset that I can perhaps summarize as "I thought every computer worked the way mine does", which these days usually means either Windows or Linux running on x86 or x64.) In code that's not intended to be portable beyond "most current systems", it may be fine. I would hope that lynx wants to be more portable than that, though. If you want a distinguished char * pointer that is not nil, the simple _portable_ thing to do is to allocate a char and point to it: char magic_value; // maybe static, if not needed beyond file scope socks5_proxy = &magic_value; ... if (socks5_proxy == &magic_value) ... /~\ The ASCII Mouse \ / Ribbon Campaign X Against HTMLmo...@rodents-montreal.org / \ Email! 7D C8 61 52 5D E7 2D 39 4E F1 31 3E E8 B3 27 4B ___ Lynx-dev mailing list Lynx-dev@nongnu.org https://lists.nongnu.org/mailman/listinfo/lynx-dev
Re: [Lynx-dev] Adding $SOCKS5_PROXY support, changing command line option
Steffen Nurpmeso dixit: >Really?? This i do not understand. You’re only allowed to take pointers to actual objects. It should probably be possible to use NULL somewhere, but you can use &hostname as magic pointer. Using (char *)-1 can cause traps on some platforms, or the compiler to replace the entire codepath (including backwards!) with nōnsense. bye, //mirabilos -- In traditional syntax ' is ignored, but in c99 everything between two ' is handled as character constant. Therefore you cannot use ' in a preproces- sing file in c99 mode. -- Ragge No faith left in ISO C99, undefined behaviour, etc. ___ Lynx-dev mailing list Lynx-dev@nongnu.org https://lists.nongnu.org/mailman/listinfo/lynx-dev
Re: [Lynx-dev] Adding $SOCKS5_PROXY support, changing command line option
!#!@!!! Thorsten Glaser wrote in : |Steffen Nurpmeso dixit: | ||+ socks5_proxy = (char*)-1; | |Don’t do that, that is not portable. Really?? This i do not understand. || cleanup: ||-if (socks5_proxy != NULL) { ||+if (socks5_proxy != (char*)-1) { || FREE(socks5_new_url); || FREE(socks5_protocol); || FREE(socks5_host); | |If this is just for freeing… free(3) takes NULL as no-op. |Otherwise, find a better way to flag this. | |Your patch also changes something wrt. socks5_orig_url. That is just plain terrible! What a mess. Thanks a lot for looking into the patch, Thorsten! Well, at least this shows i use lynx exclusively via -socks5_proxy ever since the functionality is there. Fixed, and tested with _and_without_ -socks5_proxy. (The patch applies to the git snapshot, not the dev5 ball, due to manual page, the former has the first, the latter the, hmm, latter. -.B \-socks5\-proxy=URL -.B \-socks5-proxy=URL Ciao, and a nice weekend. Good night. --steffen | |Der Kragenbaer,The moon bear, |der holt sich munter he cheerfully and one by one |einen nach dem anderen runter wa.ks himself off |(By Robert Gernhardt) diff --git a/WWW/Library/Implementation/HTTCP.c b/WWW/Library/Implementation/HTTCP.c index 2834c2c7..49be41f3 100644 --- a/WWW/Library/Implementation/HTTCP.c +++ b/WWW/Library/Implementation/HTTCP.c @@ -1847,8 +1847,13 @@ int HTDoConnect(const char *url, *s = -1; /* nothing is open yet */ -/* In case of a present SOCKS5 proxy, marshal */ -if ((socks5_orig_url = socks5_proxy) != NULL) { +/* In case of a present SOCKS5 proxy, marshal. + * Perform a getenv(3) lookup only once */ +if (socks5_proxy == NULL && + (socks5_proxy = getenv("SOCKS5_PROXY")) == NULL) + socks5_proxy = (char*)-1; + +if (socks5_proxy != (char*)-1) { int xport; xport = default_port; @@ -2264,7 +2269,7 @@ int HTDoConnect(const char *url, #endif /* INET6 */ /* Now if this was a SOCKS5 proxy connection, go for the real one */ -if (status >= 0 && socks5_orig_url != NULL) { +if (status >= 0 && socks5_proxy != (char*)-1) { unsigned char pbuf[4 + 1 + 255 + 2]; unsigned i; @@ -2393,7 +2398,7 @@ int HTDoConnect(const char *url, } cleanup: -if (socks5_proxy != NULL) { +if (socks5_proxy != (char*)-1) { FREE(socks5_new_url); FREE(socks5_protocol); FREE(socks5_host); diff --git a/lynx.man b/lynx.man index 14927858..4b8ca61a 100644 --- a/lynx.man +++ b/lynx.man @@ -805,9 +805,16 @@ If enabled the transfer rate is shown in bytes/second. If disabled, no transfer rate is shown. Use lynx.cfg or the options menu to select KB/second and/or ETA. .TP -.B \-socks5\-proxy=URL -(Via which) SOCKS5 proxy to connect. -This controls the builtin SOCKS5 support, and is therefore unrelated to +.B \-socks5_proxy=URL +(Via which) SOCKS5 proxy to connect: any network traffic, including all +DNS resolutions but the one for URL itself, will be redirected through +the SOCKS5 proxy. +URL may be given as \*(``proxy.example.com\*('', +\*(``proxy.example.com:1080\*('', \*(``192.168.0.1\*('', or +\*(``192.168.0.1:1080\*('' (and IPv6 notation if so supported). +A SOCKS5 proxy may also be specified via the environment variable +.B SOCKS5_PROXY . +This option controls the builtin SOCKS5 support, which is unrelated to the option \fB\-nosocks\fP. .TP .B \-soft_dquotes @@ -1138,6 +1145,11 @@ wais_proxy .IP See \fBLynx Users Guide\fR for additional details and examples. .TP +.B SOCKS5_PROXY +Is inspected if +.B \-socks5_proxy +has not been used (for the same content). +.TP .B SSL_CERT_DIR Set to the directory containing trusted certificates. .TP diff --git a/src/LYMain.c b/src/LYMain.c index 6d5166d4..45fc3ce2 100644 --- a/src/LYMain.c +++ b/src/LYMain.c @@ -3916,7 +3916,7 @@ saves session to that file on exit" ), #endif PARSE_STR( - "socks5-proxy", 2|NEED_LYSTRING_ARG, socks5_proxy, + "socks5_proxy", 2|NEED_LYSTRING_ARG, socks5_proxy, "=URL\n(via which) SOCKS5 proxy to connect (unrelated to -nosocks!)" ), PARSE_SET( ___ Lynx-dev mailing list Lynx-dev@nongnu.org https://lists.nongnu.org/mailman/listinfo/lynx-dev
Re: [Lynx-dev] Adding $SOCKS5_PROXY support, changing command line option
Steffen Nurpmeso dixit: |+ socks5_proxy = (char*)-1; Don’t do that, that is not portable. | cleanup: |-if (socks5_proxy != NULL) { |+if (socks5_proxy != (char*)-1) { | FREE(socks5_new_url); | FREE(socks5_protocol); | FREE(socks5_host); If this is just for freeing… free(3) takes NULL as no-op. Otherwise, find a better way to flag this. Your patch also changes something wrt. socks5_orig_url. bye, //mirabilos -- Support mksh as /bin/sh and RoQA dash NOW! ‣ src:bash (389 (415) bugs: 1 RC, 264 (283) I&N, 124 (131) M&W, 0 F&P) ‣ src:dash (90 (105) bugs: 0 RC, 48 (52) I&N, 42 (53) M&W, 0 F&P) ‣ src:mksh (0 bugs: 0 RC, 0 I&N, 0 M&W, 0 F&P) dash has two RC bugs they just closed because they don’t care about quality… ___ Lynx-dev mailing list Lynx-dev@nongnu.org https://lists.nongnu.org/mailman/listinfo/lynx-dev
Re: [Lynx-dev] Adding $SOCKS5_PROXY support, changing command line option
Hello. In April i sent a message saying Steffen Nurpmeso wrote in <20200421152638.pl92s%stef...@sdaoden.eu>: |Please find attached an extension to the -socks5-proxy patch that |made it in. On FreeBSD, they have started adding support for |a $SOCKS5_PROXY environment variable, see for example commit |[bf579e30a4d54a2d7203cdb1d1689dde46db5db6]: | | ... | This change adds SOCKS5 support to the library fetch(3) and | updates the man page. | | Details: Within the fetch_connect() function, fetch(3) checks if | the SOCKS5_PROXY environment variable is set. If so, it connects | to this host rather than the end-host. It then initializes the | SOCKS5 connection in | ... | |I felt it would be nice to integrate within this automatic proxy |selection and added support for the MUA i maintain (in as of |v14.9.18), and here is the same for lynx. | |I also changed the option name -socks5-proxy to -socks5_proxy, |i apologise for creating an option name that stands out from all |other options at first. Sorry. | |Better documentation comes as part of this, too. | |Ciao and good luck everybody from Germany, ... Is there any interest in that? |diff --git a/WWW/Library/Implementation/HTTCP.c b/WWW/Library/Implementa\ |tion/HTTCP.c |index 2834c2c7..e3ef663e 100644 |--- a/WWW/Library/Implementation/HTTCP.c |+++ b/WWW/Library/Implementation/HTTCP.c |@@ -1847,8 +1847,13 @@ int HTDoConnect(const char *url, | | *s = -1; /* nothing is open yet */ | |-/* In case of a present SOCKS5 proxy, marshal */ |-if ((socks5_orig_url = socks5_proxy) != NULL) { |+/* In case of a present SOCKS5 proxy, marshal. |+ * Perform a getenv(3) lookup only once */ |+if (socks5_proxy == NULL && |+ (socks5_proxy = getenv("SOCKS5_PROXY")) == NULL) |+ socks5_proxy = (char*)-1; |+ |+if (socks5_proxy != (char*)-1) { | int xport; | | xport = default_port; |@@ -2393,7 +2398,7 @@ int HTDoConnect(const char *url, |} | | cleanup: |-if (socks5_proxy != NULL) { |+if (socks5_proxy != (char*)-1) { | FREE(socks5_new_url); | FREE(socks5_protocol); | FREE(socks5_host); |diff --git a/lynx.man b/lynx.man |index e1900a28..5b6e011c 100644 |--- a/lynx.man |+++ b/lynx.man |@@ -805,9 +805,16 @@ If enabled the transfer rate is shown in bytes/second. | If disabled, no transfer rate is shown. | Use lynx.cfg or the options menu to select KB/second and/or ETA. | .TP |-.B \-socks5-proxy=URL |-(Via which) SOCKS5 proxy to connect. |-This controls the builtin SOCKS5 support, and is therefore unrelated to |+.B \-socks5_proxy=URL |+(Via which) SOCKS5 proxy to connect: any network traffic, including all |+DNS resolutions but the one for URL itself, will be redirected through |+the SOCKS5 proxy. |+URL may be given as \*(``proxy.example.com\*('', |+\*(``proxy.example.com:1080\*('', \*(``192.168.0.1\*('', or |+\*(``192.168.0.1:1080\*('' (and IPv6 notation if so supported). |+A SOCKS5 proxy may also be specified via the environment variable |+.B SOCKS5_PROXY . |+This option controls the builtin SOCKS5 support, which is unrelated to | the option \fB\-nosocks\fP. | .TP | .B \-soft_dquotes |@@ -1139,6 +1146,11 @@ wais_proxy | .IP | See \fBLynx Users Guide\fR for additional details and examples. | .TP |+.B SOCKS5_PROXY |+Is inspected if |+.B \-socks5_proxy |+has not been used (for the same content). |+.TP | .B SSL_CERT_DIR | Set to the directory containing trusted certificates. | .TP |diff --git a/src/LYMain.c b/src/LYMain.c |index 6d5166d4..45fc3ce2 100644 |--- a/src/LYMain.c |+++ b/src/LYMain.c |@@ -3916,7 +3916,7 @@ saves session to that file on exit" |), | #endif |PARSE_STR( |- "socks5-proxy",2|NEED_LYSTRING_ARG,socks5_proxy, |+ "socks5_proxy",2|NEED_LYSTRING_ARG,socks5_proxy, | "=URL\n(via which) SOCKS5 proxy to connect (unrelated to -nosocks!)" |), |PARSE_SET( --steffen | |Der Kragenbaer,The moon bear, |der holt sich munter he cheerfully and one by one |einen nach dem anderen runter wa.ks himself off |(By Robert Gernhardt) ___ Lynx-dev mailing list Lynx-dev@nongnu.org https://lists.nongnu.org/mailman/listinfo/lynx-dev
Re: [Lynx-dev] Any Chance of a "reader mode" in LYNX?
- Original Message - | From: "Chime Hart" | To: "lynx-dev" | Sent: Friday, August 7, 2020 4:10:33 PM | Subject: [Lynx-dev] Any Chance of a "reader mode" in LYNX? | Hi All: Well, now that it seems an `extreme number of sites have their | printer friendly articles hidden in some sort of javascript, a good friend | imformed me that Safari has a reader mode which strips all clutter, | including toolbars. Wondering if something like that would be possible in | Lynx? And if it were, I would still want to be able to save an article in | that form. I have no idea which other browsers have these functions? | Thanks so much in advance | Chime Safari gets that for "free" by a rather large JavaScript interpreter. -- Thomas E. Dickey http://invisible-island.net ftp://ftp.invisible-island.net ___ Lynx-dev mailing list Lynx-dev@nongnu.org https://lists.nongnu.org/mailman/listinfo/lynx-dev
[Lynx-dev] Any Chance of a "reader mode" in LYNX?
Hi All: Well, now that it seems an `extreme number of sites have their printer friendly articles hidden in some sort of javascript, a good friend imformed me that Safari has a reader mode which strips all clutter, including toolbars. Wondering if something like that would be possible in Lynx? And if it were, I would still want to be able to save an article in that form. I have no idea which other browsers have these functions? Thanks so much in advance Chime ___ Lynx-dev mailing list Lynx-dev@nongnu.org https://lists.nongnu.org/mailman/listinfo/lynx-dev