Skip to content

Commit

Permalink
Bad memcpy location fixed; rename MAXBYTE error
Browse files Browse the repository at this point in the history
Tests t/kolmorogov42-1.t tests for copying a long string.
  • Loading branch information
benkasminbullock committed Aug 19, 2016
1 parent d22242b commit f0a170c
Show file tree
Hide file tree
Showing 6 changed files with 38 additions and 16 deletions.
12 changes: 6 additions & 6 deletions json-common.c
Expand Up @@ -186,9 +186,9 @@ const char * type_names[json_overflow] = {

/* The maximum value of bytes to check for. */

#define MAXBYTE 0x100
#define JSON3MAXBYTE 0x100
// uncomment this when running random test to terminal otherwise ...
//#define MAXBYTE 0x80
//#define JSON3MAXBYTE 0x80

#include "errors.c"

Expand Down Expand Up @@ -267,7 +267,7 @@ typedef struct parser {

/* Bytes we accept. */

int valid_bytes[MAXBYTE];
int valid_bytes[JSON3MAXBYTE];

/* Perl SV * pointers to copy for our true, false, and null
values. */
Expand Down Expand Up @@ -372,7 +372,7 @@ failbug (char * file, int line, json_parse_t * parser, const char * format, ...)
static void make_valid_bytes (json_parse_t * parser)
{
int i;
for (i = 0; i < MAXBYTE; i++) {
for (i = 0; i < JSON3MAXBYTE; i++) {
parser->valid_bytes[i] = 0;
}
for (i = 0; i < n_expectations; i++) {
Expand All @@ -383,7 +383,7 @@ static void make_valid_bytes (json_parse_t * parser)
}
if (parser->expected & X) {
int j;
for (j = 0; j < MAXBYTE; j++) {
for (j = 0; j < JSON3MAXBYTE; j++) {
parser->valid_bytes[j] |= allowed[i][j];
}
}
Expand Down Expand Up @@ -464,7 +464,7 @@ failbadinput_json (json_parse_t * parser)
snprintf (SNEND, SNSIZE, ",\"valid bytes\":[%d",
parser->valid_bytes[0]);
EROVERFLOW;
for (j = 1; j < MAXBYTE; j++) {
for (j = 1; j < JSON3MAXBYTE; j++) {
string_end += snprintf (SNEND, SNSIZE, ",%d",
parser->valid_bytes[j]);
}
Expand Down
2 changes: 1 addition & 1 deletion json-perl.c
Expand Up @@ -320,7 +320,7 @@ PREFIX(number) (json_parse_t * parser)
if (SvLEN (string) <= cur + size) { \
SvGROW (string, cur + size); \
} \
svbuf = SvPVX(string) + cur; \
svbuf = SvPVX(string); \
memcpy (svbuf + cur, buffer, size); \
SvCUR_set (string, cur + size); \
} \
Expand Down
14 changes: 7 additions & 7 deletions json-random-test.c
Expand Up @@ -22,7 +22,7 @@
containing a list of what bytes it considered acceptable or
unacceptable at the point where parsing failed,
"parser->valid_bytes". The routine "alter_one_byte" below then
changes the offending final byte into each byte from 0 to MAXBYTE,
changes the offending final byte into each byte from 0 to JSON3MAXBYTE,
and sends the resulting string to the parser again.
"Alter_one_byte" then checks that the list of valid and invalid
Expand Down Expand Up @@ -155,8 +155,8 @@ static int
alter_one_byte (parser_t * parser)
{
int i;
int valid_bytes[MAXBYTE];
int choose[MAXBYTE];
int valid_bytes[JSON3MAXBYTE];
int choose[JSON3MAXBYTE];
int n_choose;
unsigned char * expected_bad_byte;

Expand All @@ -174,11 +174,11 @@ alter_one_byte (parser_t * parser)
byte list in the parser will be overwritten with each
successive call to "c_validate". */

for (i = 0; i < MAXBYTE; i++) {
for (i = 0; i < JSON3MAXBYTE; i++) {
valid_bytes[i] = parser->valid_bytes[i];
}

for (i = 0; i < MAXBYTE; i++) {
for (i = 0; i < JSON3MAXBYTE; i++) {
if (! valid_bytes[i]) {
#if 0
/* Notify of doing an invalid byte test. */
Expand Down Expand Up @@ -329,7 +329,7 @@ random_json ()
#endif
if (parser_o.error == json_error_unexpected_character) {
#if 0
for (j = 0; j < MAXBYTE; j++) {
for (j = 0; j < JSON3MAXBYTE; j++) {
printf ("%d", parser_o.valid_bytes[j]);
if (j % 0x40 == 0x3F) {
printf ("\n");
Expand Down Expand Up @@ -383,6 +383,6 @@ random_json ()
end:
parser_free (& parser_o);
free (json);
return parser_o.length * MAXBYTE;
return parser_o.length * JSON3MAXBYTE;
}

2 changes: 1 addition & 1 deletion lib/JSON/Parse.pm
Expand Up @@ -17,7 +17,7 @@ require Exporter;
use warnings;
use strict;
use Carp;
our $VERSION = '0.41';
our $VERSION = '0.41_01';
require XSLoader;
XSLoader::load (__PACKAGE__, $VERSION);

Expand Down
2 changes: 1 addition & 1 deletion make-errors.pl
Expand Up @@ -154,7 +154,7 @@

# Print all of the expectations as one giant array.

print $o "unsigned char allowed[n_expectations][MAXBYTE] = {\n";
print $o "unsigned char allowed[n_expectations][JSON3MAXBYTE] = {\n";
for my $i (0..$#arrays) {
print $o "/* $exs[$i] */\n";
print $o "$arrays[$i]\n";
Expand Down
22 changes: 22 additions & 0 deletions t/kolmorogov42-1.t
@@ -0,0 +1,22 @@
use warnings;
use strict;
use utf8;
use FindBin '$Bin';
use Test::More;
my $builder = Test::More->builder;
binmode $builder->output, ":utf8";
binmode $builder->failure_output, ":utf8";
binmode $builder->todo_output, ":utf8";
binmode STDOUT, ":encoding(utf8)";
binmode STDERR, ":encoding(utf8)";
use JSON::Parse 'parse_json';
my $input = <<'EOF';
{"date":1468338282,"text":"asasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdae\nrt432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasd555sdaert432fghyuiopasasddsasasasdasdasdasdasdasdasdasdassdfsdfsdfs"}
EOF
my $p;
eval {
$p = parse_json ($input);
};
ok (! $@);
ok ($p);
done_testing ();

0 comments on commit f0a170c

Please sign in to comment.