Skip to content

Commit 5261bf9

Browse files
committed
Make macaddr_in reject trailing garbage (except whitespace).
Per gripe from Patrick Welche, 13-Oct-2002.
1 parent f94e5bd commit 5261bf9

File tree

1 file changed

+18
-9
lines changed
  • src/backend/utils/adt

1 file changed

+18
-9
lines changed

src/backend/utils/adt/mac.c

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/*
22
* PostgreSQL type definitions for MAC addresses.
33
*
4-
* $Header: /cvsroot/pgsql/src/backend/utils/adt/mac.c,v 1.26 2002/09/04 20:31:28 momjian Exp $
4+
* $Header: /cvsroot/pgsql/src/backend/utils/adt/mac.c,v 1.27 2002/10/13 15:39:17 tgl Exp $
55
*/
66

77
#include "postgres.h"
@@ -35,19 +35,28 @@ macaddr_in(PG_FUNCTION_ARGS)
3535
d,
3636
e,
3737
f;
38+
char junk[2];
3839
int count;
3940

40-
count = sscanf(str, "%x:%x:%x:%x:%x:%x", &a, &b, &c, &d, &e, &f);
41+
/* %1s matches iff there is trailing non-whitespace garbage */
42+
43+
count = sscanf(str, "%x:%x:%x:%x:%x:%x%1s",
44+
&a, &b, &c, &d, &e, &f, junk);
4145
if (count != 6)
42-
count = sscanf(str, "%x-%x-%x-%x-%x-%x", &a, &b, &c, &d, &e, &f);
46+
count = sscanf(str, "%x-%x-%x-%x-%x-%x%1s",
47+
&a, &b, &c, &d, &e, &f, junk);
4348
if (count != 6)
44-
count = sscanf(str, "%2x%2x%2x:%2x%2x%2x", &a, &b, &c, &d, &e, &f);
49+
count = sscanf(str, "%2x%2x%2x:%2x%2x%2x%1s",
50+
&a, &b, &c, &d, &e, &f, junk);
4551
if (count != 6)
46-
count = sscanf(str, "%2x%2x%2x-%2x%2x%2x", &a, &b, &c, &d, &e, &f);
52+
count = sscanf(str, "%2x%2x%2x-%2x%2x%2x%1s",
53+
&a, &b, &c, &d, &e, &f, junk);
4754
if (count != 6)
48-
count = sscanf(str, "%2x%2x.%2x%2x.%2x%2x", &a, &b, &c, &d, &e, &f);
55+
count = sscanf(str, "%2x%2x.%2x%2x.%2x%2x%1s",
56+
&a, &b, &c, &d, &e, &f, junk);
4957
if (count != 6)
50-
count = sscanf(str, "%2x%2x%2x%2x%2x%2x", &a, &b, &c, &d, &e, &f);
58+
count = sscanf(str, "%2x%2x%2x%2x%2x%2x%1s",
59+
&a, &b, &c, &d, &e, &f, junk);
5160
if (count != 6)
5261
elog(ERROR, "macaddr_in: error in parsing \"%s\"", str);
5362

@@ -122,11 +131,11 @@ text_macaddr(PG_FUNCTION_ARGS)
122131
{
123132
text *addr = PG_GETARG_TEXT_P(0);
124133
Datum result;
125-
char str[18];
134+
char str[100];
126135
int len;
127136

128137
len = (VARSIZE(addr) - VARHDRSZ);
129-
if (len >= 18)
138+
if (len >= sizeof(str))
130139
elog(ERROR, "Text is too long to convert to MAC address");
131140

132141
memcpy(str, VARDATA(addr), len);

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy