Skip to content

Commit ee32ce3

Browse files
committed
Fix #1105 - issue caused by incorrectly only growing fields once when they may need to be grown multiple times.
1 parent da38c79 commit ee32ce3

7 files changed

Lines changed: 738 additions & 5 deletions

File tree

crates/engine_bibtex/src/other.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ impl OtherData {
5353
}
5454

5555
pub fn check_field_overflow(&mut self, fields: usize) {
56-
if fields > self.field_info.len() {
56+
while fields > self.field_info.len() {
5757
self.field_info.grow(MAX_FIELDS);
5858
}
5959
}

crates/engine_bibtex/src/scan.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -790,7 +790,7 @@ pub(crate) fn scan_and_store_the_field_value_and_eat_white(
790790
} else {
791791
let field_ptr =
792792
cites.entry_ptr() * other.num_fields() + hash.ilk_info(field_name_loc) as usize;
793-
if field_ptr > other.max_fields() {
793+
if field_ptr >= other.max_fields() {
794794
write_logs("field_info index is out of range");
795795
print_confusion();
796796
return Err(BibtexError::Fatal);

tests/bibtex.rs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,7 @@ impl TestCase {
6161
let mut status = NoopStatusBackend::default();
6262
let mut launcher = CoreBridgeLauncher::new(&mut hooks, &mut status);
6363

64-
BibtexEngine::new()
65-
.process(&mut launcher, &auxname, &Default::default())
66-
.unwrap();
64+
let res = BibtexEngine::new().process(&mut launcher, &auxname, &Default::default());
6765

6866
// Check that outputs match expectations.
6967

@@ -81,6 +79,8 @@ impl TestCase {
8179
expect
8280
.file(ExpectedFile::read_with_extension(&mut p, "blg").collection(&files))
8381
.finish();
82+
83+
res.unwrap();
8484
}
8585
}
8686

@@ -175,3 +175,13 @@ fn test_many_preamble() {
175175
fn test_nested_aux() {
176176
TestCase::new("nested", Some("aux_files")).go();
177177
}
178+
179+
/// Test for [#1105](https://github.com/tectonic-typesetting/tectonic/issues/1105), with enough
180+
/// citations in the aux and fields in the bst to require more than one allocation of field space
181+
/// at once.
182+
#[test]
183+
fn test_lots_of_cites() {
184+
TestCase::new("lots_of_cites", Some("aux_files"))
185+
.test_bbl(false)
186+
.go();
187+
}
Lines changed: 291 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,291 @@
1+
% Test for #1105
2+
3+
\bibstyle{lots_of_entries}
4+
\bibdata{lots_of_cites}
5+
6+
\citation{A}
7+
\citation{B}
8+
\citation{C}
9+
\citation{D}
10+
\citation{E}
11+
\citation{F}
12+
\citation{G}
13+
\citation{H}
14+
\citation{I}
15+
\citation{J}
16+
\citation{K}
17+
\citation{L}
18+
\citation{M}
19+
\citation{N}
20+
\citation{O}
21+
\citation{P}
22+
\citation{Q}
23+
\citation{R}
24+
\citation{S}
25+
\citation{T}
26+
\citation{U}
27+
\citation{V}
28+
\citation{W}
29+
\citation{X}
30+
\citation{Y}
31+
\citation{Z}
32+
\citation{AA}
33+
\citation{AB}
34+
\citation{AC}
35+
\citation{AD}
36+
\citation{AE}
37+
\citation{AF}
38+
\citation{AG}
39+
\citation{AH}
40+
\citation{AI}
41+
\citation{AJ}
42+
\citation{AK}
43+
\citation{AL}
44+
\citation{AM}
45+
\citation{AN}
46+
\citation{AO}
47+
\citation{AP}
48+
\citation{AQ}
49+
\citation{AR}
50+
\citation{AS}
51+
\citation{AT}
52+
\citation{AU}
53+
\citation{AV}
54+
\citation{AW}
55+
\citation{AX}
56+
\citation{AY}
57+
\citation{AZ}
58+
\citation{BA}
59+
\citation{BB}
60+
\citation{BC}
61+
\citation{BD}
62+
\citation{BE}
63+
\citation{BF}
64+
\citation{BG}
65+
\citation{BH}
66+
\citation{BI}
67+
\citation{BJ}
68+
\citation{BK}
69+
\citation{BL}
70+
\citation{BM}
71+
\citation{BN}
72+
\citation{BO}
73+
\citation{BP}
74+
\citation{BQ}
75+
\citation{BR}
76+
\citation{BS}
77+
\citation{BT}
78+
\citation{BU}
79+
\citation{BV}
80+
\citation{BW}
81+
\citation{BX}
82+
\citation{BY}
83+
\citation{BZ}
84+
\citation{CA}
85+
\citation{CB}
86+
\citation{CC}
87+
\citation{CD}
88+
\citation{CE}
89+
\citation{CF}
90+
\citation{CG}
91+
\citation{CH}
92+
\citation{CI}
93+
\citation{CJ}
94+
\citation{CK}
95+
\citation{CL}
96+
\citation{CM}
97+
\citation{CN}
98+
\citation{CO}
99+
\citation{CP}
100+
\citation{CQ}
101+
\citation{CR}
102+
\citation{CS}
103+
\citation{CT}
104+
\citation{CU}
105+
\citation{CV}
106+
\citation{CW}
107+
\citation{CX}
108+
\citation{CY}
109+
\citation{CZ}
110+
\citation{DA}
111+
\citation{DB}
112+
\citation{DC}
113+
\citation{DD}
114+
\citation{DE}
115+
\citation{DF}
116+
\citation{DG}
117+
\citation{DH}
118+
\citation{DI}
119+
\citation{DJ}
120+
\citation{DK}
121+
\citation{DL}
122+
\citation{DM}
123+
\citation{DN}
124+
\citation{DO}
125+
\citation{DP}
126+
\citation{DQ}
127+
\citation{DR}
128+
\citation{DS}
129+
\citation{DT}
130+
\citation{DU}
131+
\citation{DV}
132+
\citation{DW}
133+
\citation{DX}
134+
\citation{DY}
135+
\citation{DZ}
136+
\citation{EA}
137+
\citation{EB}
138+
\citation{EC}
139+
\citation{ED}
140+
\citation{EE}
141+
\citation{EF}
142+
\citation{EG}
143+
\citation{EH}
144+
\citation{EI}
145+
\citation{EJ}
146+
\citation{EK}
147+
\citation{EL}
148+
\citation{EM}
149+
\citation{EN}
150+
\citation{EO}
151+
\citation{EP}
152+
\citation{EQ}
153+
\citation{ER}
154+
\citation{ES}
155+
\citation{ET}
156+
\citation{EU}
157+
\citation{EV}
158+
\citation{EW}
159+
\citation{EX}
160+
\citation{EY}
161+
\citation{EZ}
162+
\citation{FA}
163+
\citation{FB}
164+
\citation{FC}
165+
\citation{FD}
166+
\citation{FE}
167+
\citation{FF}
168+
\citation{FG}
169+
\citation{FH}
170+
\citation{FI}
171+
\citation{FJ}
172+
\citation{FK}
173+
\citation{FL}
174+
\citation{FM}
175+
\citation{FN}
176+
\citation{FO}
177+
\citation{FP}
178+
\citation{FQ}
179+
\citation{FR}
180+
\citation{FS}
181+
\citation{FT}
182+
\citation{FU}
183+
\citation{FV}
184+
\citation{FW}
185+
\citation{FX}
186+
\citation{FY}
187+
\citation{FZ}
188+
\citation{GA}
189+
\citation{GB}
190+
\citation{GC}
191+
\citation{GD}
192+
\citation{GE}
193+
\citation{GF}
194+
\citation{GG}
195+
\citation{GH}
196+
\citation{GI}
197+
\citation{GJ}
198+
\citation{GK}
199+
\citation{GL}
200+
\citation{GM}
201+
\citation{GN}
202+
\citation{GO}
203+
\citation{GP}
204+
\citation{GQ}
205+
\citation{GR}
206+
\citation{GS}
207+
\citation{GT}
208+
\citation{GU}
209+
\citation{GV}
210+
\citation{GW}
211+
\citation{GX}
212+
\citation{GY}
213+
\citation{GZ}
214+
\citation{HA}
215+
\citation{HB}
216+
\citation{HC}
217+
\citation{HD}
218+
\citation{HE}
219+
\citation{HF}
220+
\citation{HG}
221+
\citation{HH}
222+
\citation{HI}
223+
\citation{HJ}
224+
\citation{HK}
225+
\citation{HL}
226+
\citation{HM}
227+
\citation{HN}
228+
\citation{HO}
229+
\citation{HP}
230+
\citation{HQ}
231+
\citation{HR}
232+
\citation{HS}
233+
\citation{HT}
234+
\citation{HU}
235+
\citation{HV}
236+
\citation{HW}
237+
\citation{HX}
238+
\citation{HY}
239+
\citation{HZ}
240+
\citation{IA}
241+
\citation{IB}
242+
\citation{IC}
243+
\citation{ID}
244+
\citation{IE}
245+
\citation{IF}
246+
\citation{IG}
247+
\citation{IH}
248+
\citation{II}
249+
\citation{IJ}
250+
\citation{IK}
251+
\citation{IL}
252+
\citation{IM}
253+
\citation{IN}
254+
\citation{IO}
255+
\citation{IP}
256+
\citation{IQ}
257+
\citation{IR}
258+
\citation{IS}
259+
\citation{IT}
260+
\citation{IU}
261+
\citation{IV}
262+
\citation{IW}
263+
\citation{IX}
264+
\citation{IY}
265+
\citation{IZ}
266+
\citation{JA}
267+
\citation{JB}
268+
\citation{JC}
269+
\citation{JD}
270+
\citation{JE}
271+
\citation{JF}
272+
\citation{JG}
273+
\citation{JH}
274+
\citation{JI}
275+
\citation{JJ}
276+
\citation{JK}
277+
\citation{JL}
278+
\citation{JM}
279+
\citation{JN}
280+
\citation{JO}
281+
\citation{JP}
282+
\citation{JQ}
283+
\citation{JR}
284+
\citation{JS}
285+
\citation{JT}
286+
\citation{JU}
287+
\citation{JV}
288+
\citation{JW}
289+
\citation{JX}
290+
\citation{JY}
291+
\citation{JZ}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
2+
@misc {jz,
3+
a = "Foo"
4+
}

0 commit comments

Comments
 (0)