aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/nodes/read.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/src/backend/nodes/read.c b/src/backend/nodes/read.c
index a9cb81b1290..fe84f140eef 100644
--- a/src/backend/nodes/read.c
+++ b/src/backend/nodes/read.c
@@ -288,7 +288,7 @@ nodeTokenType(const char *token, int length)
retval = T_Boolean;
else if (*token == '"' && length > 1 && token[length - 1] == '"')
retval = T_String;
- else if (*token == 'b')
+ else if (*token == 'b' || *token == 'x')
retval = T_BitString;
else
retval = OTHER_TOKEN;
@@ -471,11 +471,10 @@ nodeRead(const char *token, int tok_len)
break;
case T_BitString:
{
- char *val = palloc(tok_len);
+ char *val = palloc(tok_len + 1);
- /* skip leading 'b' */
- memcpy(val, token + 1, tok_len - 1);
- val[tok_len - 1] = '\0';
+ memcpy(val, token, tok_len);
+ val[tok_len] = '\0';
result = (Node *) makeBitString(val);
break;
}