On Sun, Sep 05, 2021 at 03:57:42PM -0700, Stephen Balousek wrote: > Allow the use of HTTP servers listening on ports other 80. This is done > with an extension to the http notation of either: > > (http[,server[,port]]) > > - or - > > (http[,server[:port]]) > > Signed-off-by: Stephen Balousek <sbalou...@wickedloop.com> > --- > grub-core/net/http.c | 43 +++++++++++++++++++++++++++++++++++++++---- > 1 file changed, 39 insertions(+), 4 deletions(-) > > diff --git a/grub-core/net/http.c b/grub-core/net/http.c > index b616cf40b..87e496e7f 100644 > --- a/grub-core/net/http.c > +++ b/grub-core/net/http.c > @@ -312,6 +312,9 @@ http_establish (struct grub_file *file, grub_off_t > offset, int initial) > int i; > struct grub_net_buff *nb; > grub_err_t err; > + char *server_name; > + char *port_string; > + long port_number;
s/long/unsigned long/g > nb = grub_netbuff_alloc (GRUB_NET_TCP_RESERVE_SIZE > + sizeof ("GET ") - 1 > @@ -390,10 +393,42 @@ http_establish (struct grub_file *file, grub_off_t > offset, int initial) > grub_netbuff_put (nb, 2); > grub_memcpy (ptr, "\r\n", 2); > > - data->sock = grub_net_tcp_open (file->device->net->server, > - HTTP_PORT, http_receive, > - http_err, NULL, > - file); > + port_string = grub_strrchr(file->device->net->server, ','); Missing space between grub_strrchr and "(". Same thing should be fixed in the functions calls below. > + if (!port_string) if (port_string == NULL) > + { > + port_string = grub_strrchr(file->device->net->server, ':'); > + if (grub_strchr(port_string + 1, ']')) You blindly assume port_string is not NULL here. > + { > + port_string = 0; port_string = NULL; > + } You do not need these curly brackets. > + } > + if (port_string) if (port_string != NULL) > + { > + port_number = grub_strtol(port_string + 1, 0, 10); Please use grub_strtoul() instead of grub_strtol() and handle all errors properly. The strtoul man page is your friend. > + if (port_number <= 0 || port_number > 65535) > + { > + return grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("invalid port > number `%s'"), port_string + 1); > + } Please drop these curly brackets. > + server_name = grub_strdup(file->device->net->server); grub_strdup() may return NULL... > + server_name[port_string - file->device->net->server] = 0; s/0/'\0'/ > + } > + else > + { > + port_number = HTTP_PORT; > + server_name = file->device->net->server; > + } > + > + data->sock = grub_net_tcp_open (server_name, > + port_number, http_receive, > + http_err, NULL, > + file); > + > + if (server_name != file->device->net->server) > + { > + grub_free(server_name); > + } Please drop these curly brackets. Daniel _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel