Skip to content

Commit a51853f

Browse files
committed
Hopefully fix issue with underflow on cite_number
1 parent 431214f commit a51853f

1 file changed

Lines changed: 16 additions & 14 deletions

File tree

crates/engine_bibtex/bibtex/bibtex.c

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -825,8 +825,6 @@ static bool scan_and_store_the_field_value_and_eat_white(Bibtex* ctx, bool store
825825
} else { /*264: */
826826
field_loc field_ptr = entry_cite_ptr() * num_fields() + ilk_info(field_name_loc);
827827
if (field_ptr >= max_fields()) {
828-
puts_log("entry_cite_ptr * num_fields + ilk_info[field_name_loc] >= max_fields\n");
829-
printf_log("%d * %d + %d >= %d\n", entry_cite_ptr(), num_fields(), ilk_info(field_name_loc), max_fields());
830828
puts_log("field_info index is out of range");
831829
print_confusion();
832830
longjmp(error_jmpbuf, 1);
@@ -3215,8 +3213,6 @@ static void execute_fn(ExecCtx* ctx, hash_loc ex_fn_loc)
32153213
else {
32163214
field_loc field_ptr = cite_ptr() * num_fields() + ilk_info(ex_fn_loc);
32173215
if (field_ptr >= max_fields()) {
3218-
puts_log("cite_ptr * num_fields + ilk_info[ex_fn_loc] >= max_fields\n");
3219-
printf_log("%d * %d + %d >= %d\n", cite_ptr(), num_fields(), ilk_info(ex_fn_loc), max_fields());
32203216
puts_log("field_info index is out of range");
32213217
print_confusion();
32223218
longjmp(error_jmpbuf, 1);
@@ -4737,10 +4733,14 @@ static void bst_read_command(Bibtex* ctx)
47374733
set_num_cites(cite_ptr());
47384734
ctx->num_preamble_strings = preamble_ptr();
47394735
{
4740-
if ((num_cites() - 1) * num_fields() + crossref_num() >= max_fields()) {
4741-
puts_log("First One\n");
4742-
puts_log("(num_cites - 1) * num_fields + crossref_num >= max_fields\n");
4743-
printf_log("(%d - 1) * %d + %d >= %d\n", num_cites(), num_fields(), crossref_num(), max_fields());
4736+
CiteNumber cites = num_cites();
4737+
if cites > 0 {
4738+
cites -= 1;
4739+
}
4740+
if (cites * num_fields() + crossref_num() >= max_fields()) {
4741+
// puts_log("First One\n");
4742+
// puts_log("(num_cites - 1) * num_fields + crossref_num >= max_fields\n");
4743+
// printf_log("(%d - 1) * %d + %d >= %d\n", num_cites(), num_fields(), crossref_num(), max_fields());
47444744
puts_log("field_info index is out of range");
47454745
print_confusion();
47464746
longjmp(error_jmpbuf, 1);
@@ -4771,10 +4771,14 @@ static void bst_read_command(Bibtex* ctx)
47714771
}
47724772
}
47734773
{
4774-
if ((num_cites() - 1) * num_fields() + crossref_num() >= max_fields()) {
4775-
puts_log("Second One\n");
4776-
puts_log("(num_cites - 1) * num_fields + crossref_num >= max_fields\n");
4777-
printf_log("(%d - 1) * %d + %d >= %d\n", num_cites(), num_fields(), crossref_num(), max_fields());
4774+
CiteNumber cites = num_cites();
4775+
if cites > 0 {
4776+
cites -= 1;
4777+
}
4778+
if (cites * num_fields() + crossref_num() >= max_fields()) {
4779+
// puts_log("Second One\n");
4780+
// puts_log("(num_cites - 1) * num_fields + crossref_num >= max_fields\n");
4781+
// printf_log("(%d - 1) * %d + %d >= %d\n", num_cites(), num_fields(), crossref_num(), max_fields());
47784782
puts_log("field_info index is out of range");
47794783
print_confusion();
47804784
longjmp(error_jmpbuf, 1);
@@ -4830,8 +4834,6 @@ static void bst_read_command(Bibtex* ctx)
48304834
} else if ((ctx->all_entries) || (cite_ptr() < old_num_cites()) || (cite_info(cite_ptr()) >= ctx->config.min_crossrefs)) {
48314835
if (cite_ptr() > ctx->cite_xptr) { /*286: */
48324836
if ((ctx->cite_xptr + 1) * num_fields() > max_fields()) {
4833-
puts_log("(cite_xptr + 1) * num_fields > max_fields\n");
4834-
printf_log("(%d + 1) * %d > %d\n", ctx->cite_xptr, num_fields(), max_fields());
48354837
puts_log("field_info index is out of range");
48364838
print_confusion();
48374839
longjmp(error_jmpbuf, 1);

0 commit comments

Comments
 (0)