[glib: 2/4] tlscertificate: Avoid possible invalid read
- From: Philip Withnall <pwithnall src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib: 2/4] tlscertificate: Avoid possible invalid read
- Date: Mon, 7 Jun 2021 08:36:14 +0000 (UTC)
commit 39f661b070756f1b07760cbae6d3607686d1f166
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date: Fri Jun 4 11:16:46 2021 -0400
tlscertificate: Avoid possible invalid read
In various places, do not read past the end of the data.
Fixes https://gitlab.gnome.org/GNOME/glib/-/issues/2416
gio/gtlscertificate.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
---
diff --git a/gio/gtlscertificate.c b/gio/gtlscertificate.c
index c46ad107c..1e01af659 100644
--- a/gio/gtlscertificate.c
+++ b/gio/gtlscertificate.c
@@ -353,6 +353,7 @@ parse_private_key (const gchar *data,
GError **error)
{
const gchar *header_start = NULL, *header_end, *footer_start = NULL, *footer_end;
+ const gchar *data_end = data + data_len;
header_end = g_strstr_len (data, data_len, PEM_PRIVKEY_HEADER_END);
if (header_end)
@@ -389,7 +390,7 @@ parse_private_key (const gchar *data,
footer_end += strlen (PEM_PRIVKEY_FOOTER_END);
- while (*footer_end == '\r' || *footer_end == '\n')
+ while ((footer_end < data_end) && (*footer_end == '\r' || *footer_end == '\n'))
footer_end++;
return g_strndup (header_start, footer_end - header_start);
@@ -423,7 +424,7 @@ parse_next_pem_certificate (const gchar **data,
return NULL;
}
end += strlen (PEM_CERTIFICATE_FOOTER);
- while (*end == '\r' || *end == '\n')
+ while ((end < data_end) && (*end == '\r' || *end == '\n'))
end++;
*data = end;
@@ -455,7 +456,7 @@ parse_and_create_certificate_list (const gchar *data,
/* If we read one certificate successfully, let's see if we can read
* some more. If not, we will simply return a list with the first one.
*/
- while (p && *p)
+ while (p < end && p && *p)
{
gchar *cert_pem;
GError *error = NULL;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]