redcarpet 1.3.2 → 1.3.3
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of redcarpet might be problematic. Click here for more details.
- data/ext/buffer.c +2 -2
- data/ext/buffer.h +0 -2
- data/ext/markdown.c +42 -22
- data/ext/xhtml.c +1 -7
- data/lib/redcarpet.rb +1 -1
- data/redcarpet.gemspec +1 -1
- data/test/redcarpet_test.rb +8 -0
- metadata +3 -3
data/ext/buffer.c
CHANGED
@@ -21,9 +21,9 @@
|
|
21
21
|
*
|
22
22
|
* BUFFER_STATS • if defined, stats are kept about memory usage
|
23
23
|
*/
|
24
|
-
#define BUFFER_STATS
|
25
24
|
|
26
25
|
#define BUFFER_STDARG
|
26
|
+
#define BUFFER_MAX_ALLOC_SIZE (1024 * 1024 * 16) //16mb
|
27
27
|
|
28
28
|
#include "buffer.h"
|
29
29
|
|
@@ -153,7 +153,7 @@ int
|
|
153
153
|
bufgrow(struct buf *buf, size_t neosz) {
|
154
154
|
size_t neoasz;
|
155
155
|
void *neodata;
|
156
|
-
if (!buf || !buf->unit) return 0;
|
156
|
+
if (!buf || !buf->unit || neosz > BUFFER_MAX_ALLOC_SIZE) return 0;
|
157
157
|
if (buf->asize >= neosz) return 1;
|
158
158
|
neoasz = buf->asize + buf->unit;
|
159
159
|
while (neoasz < neosz) neoasz += buf->unit;
|
data/ext/buffer.h
CHANGED
data/ext/markdown.c
CHANGED
@@ -600,7 +600,7 @@ char_langle_tag(struct buf *ob, struct render *rndr, char *data, size_t offset,
|
|
600
600
|
struct buf work = { data, end, 0, 0, 0 };
|
601
601
|
int ret = 0;
|
602
602
|
|
603
|
-
if (end) {
|
603
|
+
if (end > 2) {
|
604
604
|
if (rndr->make.autolink && altype != MKDA_NOT_AUTOLINK) {
|
605
605
|
work.data = data + 1;
|
606
606
|
work.size = end - 2;
|
@@ -1001,23 +1001,29 @@ parse_blockquote(struct buf *ob, struct render *rndr, char *data, size_t size)
|
|
1001
1001
|
|
1002
1002
|
beg = 0;
|
1003
1003
|
while (beg < size) {
|
1004
|
-
for (end = beg + 1; end < size && data[end - 1] != '\n'; end
|
1004
|
+
for (end = beg + 1; end < size && data[end - 1] != '\n'; end++);
|
1005
|
+
|
1005
1006
|
pre = prefix_quote(data + beg, end - beg);
|
1006
|
-
|
1007
|
-
|
1008
|
-
|
1009
|
-
|
1010
|
-
|
1007
|
+
|
1008
|
+
if (pre)
|
1009
|
+
beg += pre; /* skipping prefix */
|
1010
|
+
|
1011
|
+
/* empty line followed by non-quote line */
|
1012
|
+
else if (is_empty(data + beg, end - beg) &&
|
1013
|
+
(end >= size || (prefix_quote(data + end, size - end) == 0 &&
|
1014
|
+
!is_empty(data + end, size - end))))
|
1011
1015
|
break;
|
1016
|
+
|
1012
1017
|
if (beg < end) { /* copy into the in-place working buffer */
|
1013
1018
|
/* bufput(work, data + beg, end - beg); */
|
1014
1019
|
if (!work_data)
|
1015
1020
|
work_data = data + beg;
|
1016
1021
|
else if (data + beg != work_data + work_size)
|
1017
|
-
memmove(work_data + work_size, data + beg,
|
1018
|
-
|
1019
|
-
|
1020
|
-
beg = end;
|
1022
|
+
memmove(work_data + work_size, data + beg, end - beg);
|
1023
|
+
work_size += end - beg;
|
1024
|
+
}
|
1025
|
+
beg = end;
|
1026
|
+
}
|
1021
1027
|
|
1022
1028
|
parse_block(out, rndr, work_data, work_size);
|
1023
1029
|
if (rndr->make.blockquote)
|
@@ -1094,7 +1100,7 @@ parse_paragraph(struct buf *ob, struct render *rndr, char *data, size_t size)
|
|
1094
1100
|
while (work.size && data[work.size - 1] == '\n')
|
1095
1101
|
work.size -= 1;
|
1096
1102
|
|
1097
|
-
if (work.size) {
|
1103
|
+
if (work.size > 0) {
|
1098
1104
|
struct buf *tmp = 0;
|
1099
1105
|
|
1100
1106
|
if (rndr->work.size < rndr->work.asize) {
|
@@ -1330,18 +1336,32 @@ parse_atxheader(struct buf *ob, struct render *rndr, char *data, size_t size)
|
|
1330
1336
|
size_t i, end, skip;
|
1331
1337
|
struct buf work = { data, 0, 0, 0, 0 };
|
1332
1338
|
|
1333
|
-
if (!size || data[0] != '#')
|
1334
|
-
|
1335
|
-
|
1336
|
-
|
1339
|
+
if (!size || data[0] != '#')
|
1340
|
+
return 0;
|
1341
|
+
|
1342
|
+
while (level < size && level < 6 && data[level] == '#')
|
1343
|
+
level++;
|
1344
|
+
|
1345
|
+
for (i = level; i < size && (data[i] == ' ' || data[i] == '\t'); i++);
|
1346
|
+
|
1337
1347
|
work.data = data + i;
|
1338
|
-
for (end = i; end < size && data[end] != '\n'; end
|
1348
|
+
for (end = i; end < size && data[end] != '\n'; end++);
|
1339
1349
|
skip = end;
|
1340
|
-
|
1341
|
-
while (end &&
|
1342
|
-
|
1343
|
-
|
1344
|
-
|
1350
|
+
|
1351
|
+
while (end && data[end - 1] == '#')
|
1352
|
+
end--;
|
1353
|
+
|
1354
|
+
while (end && (data[end - 1] == ' ' || data[end - 1] == '\t'))
|
1355
|
+
end--;
|
1356
|
+
|
1357
|
+
if (end > i) {
|
1358
|
+
work.size = end - i;
|
1359
|
+
|
1360
|
+
if (rndr->make.header)
|
1361
|
+
rndr->make.header(ob, &work, (int)level, &rndr->make.render_options);
|
1362
|
+
|
1363
|
+
}
|
1364
|
+
|
1345
1365
|
return skip;
|
1346
1366
|
}
|
1347
1367
|
|
data/ext/xhtml.c
CHANGED
@@ -47,12 +47,6 @@ is_safe_link(const char *link, size_t link_len)
|
|
47
47
|
return 0;
|
48
48
|
}
|
49
49
|
|
50
|
-
static inline int
|
51
|
-
is_uri_char(char c)
|
52
|
-
{
|
53
|
-
return isalnum(c) || strchr("/:$-_.+!*'(),", c) != NULL;
|
54
|
-
}
|
55
|
-
|
56
50
|
static inline int
|
57
51
|
put_scaped_char(struct buf *ob, char c)
|
58
52
|
{
|
@@ -454,7 +448,7 @@ rndr_normal_text(struct buf *ob, struct buf *text, struct mkd_renderopt *options
|
|
454
448
|
is_safe_link(text->data + i, text->size - i)) {
|
455
449
|
size_t j = i;
|
456
450
|
|
457
|
-
while (j < text->size &&
|
451
|
+
while (j < text->size && !isspace(text->data[j]))
|
458
452
|
j++;
|
459
453
|
|
460
454
|
rndr_autolink2(ob, &text->data[i], j - i, MKDA_NORMAL);
|
data/lib/redcarpet.rb
CHANGED
data/redcarpet.gemspec
CHANGED
data/test/redcarpet_test.rb
CHANGED
@@ -146,4 +146,12 @@ class RedcarpetTest < Test::Unit::TestCase
|
|
146
146
|
This could be more elegant.
|
147
147
|
leaks
|
148
148
|
end
|
149
|
+
|
150
|
+
def test_infinite_loop_in_header
|
151
|
+
assert_equal Redcarpet.new(<<-header).to_html.strip, "<h1>Body</h1>"
|
152
|
+
######
|
153
|
+
#Body#
|
154
|
+
######
|
155
|
+
header
|
156
|
+
end
|
149
157
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redcarpet
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 29
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 1.3.
|
9
|
+
- 3
|
10
|
+
version: 1.3.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- "Natacha Port\xC3\xA9"
|