Having // at the beginning of the path may have special meaning according to posix. I don't know if it applies in particular case and if the special meaning is useful for grub to begin with, just something to check
On Thu, 31 Oct 2019, 11:37 Javier Martinez Canillas, <javi...@redhat.com> wrote: > From: Lenny Szubowicz <lszub...@redhat.com> > > Some tftp servers do not handle multiple consecutive slashes correctly; > this patch avoids sending tftp requests with non-normalized paths. > > Signed-off-by: Lenny Szubowicz <lszub...@redhat.com> > Signed-off-by: Mark Salter <msal...@redhat.com> > Signed-off-by: Javier Martinez Canillas <javi...@redhat.com> > --- > > grub-core/net/tftp.c | 28 +++++++++++++++++++++++++--- > 1 file changed, 25 insertions(+), 3 deletions(-) > > diff --git grub-core/net/tftp.c grub-core/net/tftp.c > index 7d90bf66e76..6dbb9cdbb7a 100644 > --- grub-core/net/tftp.c > +++ grub-core/net/tftp.c > @@ -300,6 +300,25 @@ destroy_pq (tftp_data_t data) > grub_priority_queue_destroy (data->pq); > } > > +/* Create a normalized copy of the filename. > + Compress any string of consecutive forward slashes to a single forward > + slash. */ > +static void > +grub_normalize_filename (char *normalized, const char *filename) > +{ > + char *dest = normalized; > + const char *src = filename; > + > + while (*src != '\0') > + { > + if (src[0] == '/' && src[1] == '/') > + src++; > + else > + *dest++ = *src++; > + } > + *dest = '\0'; > +} > + > static grub_err_t > tftp_open (struct grub_file *file, const char *filename) > { > @@ -337,9 +356,12 @@ tftp_open (struct grub_file *file, const char > *filename) > rrqlen = 0; > > tftph->opcode = grub_cpu_to_be16_compile_time (TFTP_RRQ); > - grub_strcpy (rrq, filename); > - rrqlen += grub_strlen (filename) + 1; > - rrq += grub_strlen (filename) + 1; > + > + /* Copy and normalize the filename to work-around issues on some tftp > + servers when file names are being matched for remapping. */ > + grub_normalize_filename (rrq, filename); > + rrqlen += grub_strlen (rrq) + 1; > + rrq += grub_strlen (rrq) + 1; > > grub_strcpy (rrq, "octet"); > rrqlen += grub_strlen ("octet") + 1; > -- > 2.21.0 > > > _______________________________________________ > Grub-devel mailing list > Grub-devel@gnu.org > https://lists.gnu.org/mailman/listinfo/grub-devel >
_______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel