This is an automated email from the ASF dual-hosted git repository. asf-gitbox-commits pushed a commit to branch openformula in repository https://gitbox.apache.org/repos/asf/openoffice.git
commit 41da3628f9e49de34afa10b0cae93bbdde1389bc Author: Pedro Giffuni <[email protected]> AuthorDate: Wed Nov 11 17:30:05 2026 -0500 docs: G.1 gap-status cleanup — STRING_MAXLEN and ScDBCount empty-cell investigation Updated F-GAP-008: STRING_MAXLEN defined in main/tools/inc/tools/string.hxx (0x7FFFFFFF with STRING32, 0xFFFF without; default 65,535 exceeds ODF 1.4 32,767 minimum). Updated F-GAP-004: ScDBCount empty-cell TODO traced — ScQueryCellIterator and ScDBQueryDataIterator both skip empty cells; DCOUNT without field undercounts per ODF 1.4 §6.9.3. No production source modified; documentation/gap-status only. --- openformula-small-group-semantic-gaps.tsv | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openformula-small-group-semantic-gaps.tsv b/openformula-small-group-semantic-gaps.tsv index acbb1a35af..8ab89c47ef 100644 --- a/openformula-small-group-semantic-gaps.tsv +++ b/openformula-small-group-semantic-gaps.tsv @@ -2,11 +2,11 @@ GapID ODF Clause Requirement AOO Implementation Location Current Behavior Classi F-GAP-001 §6.13.7 COUNTA counts non-empty cells; empty string "" is not blank main/sc/source/core/tool/interpr1.cxx:3834 (ScCount2 via IterateParameters(ifCOUNT2) at :3487) COUNTA counts scalar string args including ""; counts cells where eCellType != CELLTYPE_NONE && != CELLTYPE_NOTE; matrix case counts ALL elements including strings; formula cells returning "" counted as non-blank based on CELLTYPE_FORMULA (result not checked) Required by ODF 1.4; implementation-defined for formula cel [...] F-GAP-002 §6.13.8 COUNTBLANK counts empty cells; cell returning "" blankness is implementation-defined main/sc/source/core/tool/interpr1.cxx:4714 (ScCountEmptyCells) COUNTBLANK uses cell-type-only check: eCellType != CELLTYPE_NONE && != CELLTYPE_NOTE → not blank; truly empty CELLTYPE_NONE cells are blank; formula cells returning "" treated as not blank (CELLTYPE_FORMULA != CELLTYPE_NONE); scalar "" argument not supported (only references) Implementation-defined (§6.13.8); differs from po [...] F-GAP-003 §6.14.6 INDEX single-argument row vector returns error (no row-vector shortcut) main/sc/source/core/tool/interpr1.cxx:7419 (ScIndex); Milestone A commit bb58e28fc2 removed bRowArray shortcut INDEX(H1:L1;3) returns error (nRow > 1 on single row → PushIllegalArgument); INDEX(H1:L1;;3) works (column-only); INDEX on matrix/vector handled per ODF 1.4 Required by ODF 1.4; fixed in Milestone A; regression risk for legacy ODF 1.3 documents High Regression-test against existing document [...] -F-GAP-004 §4.11.11 Criteria syntax supported in database functions main/sc/source/core/tool/interpr1.cxx:6621 (GetDBParams), :6760 (DBIterator); queryparam.cxx:106-144 (operator prefix parsing) Criteria operators parsed: <>, <=, <, >=, >, =; bQueryByString via IsNumberFormat; bRegExp via MayBeRegExp; DBCount has TODO about empty-cell matching (interpr1.cxx:6838-6845) Required by ODF 1.4; parser and evaluation present; empty-cell matching limitation documented Medium Verify criteria match [...] +F-GAP-004 §4.11.11 Criteria syntax supported in database functions main/sc/source/core/tool/interpr1.cxx:6621 (GetDBParams), :6760 (DBIterator); queryparam.cxx:106-144 (operator prefix parsing) Criteria operators parsed: <>, <=, <, >=, >, =; bQueryByString via IsNumberFormat; bRegExp via MayBeRegExp; DBCount empty-cell TODO at :6838-6845 — ScQueryCellIterator ("run through all not empty cells") skips empty cells; ScDBQueryDataIterator also skips CELLTYPE_NONE via default case at dociter. [...] F-GAP-005 §4.11.11 Database criteria: text criteria, wildcards, empty criteria main/sc/source/core/tool/queryparam.cxx:106-144 (operator parsing); interpr1.cxx:6745-6748 (bQueryByString/bRegExp) Text criteria supported via bQueryByString; wildcard/RegExp via MayBeRegExp; empty criteria cell (svMissing) handled as missing field Required by ODF 1.4; partially verified Medium Verify wildcard and text criteria matching calcval: no dedicated wildcard/empty-criteria cases — not covered F-GAP-006 §3.7 Formula length at least 1024 characters No explicit formula length limit found in main/sc or main/formula source No MAXFORMULA or formula-size enforcement found; FormulaCompiler parses token arrays dynamically Unverifiable (static); absence of hard limit doesn't prove conformance Low Runtime test with 1024+ char formula calcval: BL-001-1024chars (1026-char expression) — UNVERIFIED F-GAP-007 §3.7 At least 30 parameters per function where prototype permits main/sc/source/core/inc/interpre.hxx:897-927 (MustHaveParamCount family) Per-function parameter count enforced via MustHaveParamCount/MustHaveParamCountMin; no global 30-param cap found Unverifiable (static); no 30-param cap found Low Runtime test with 30-parameter function call calcval: BL-002-30params (MAX with 30 params) — UNVERIFIED -F-GAP-008 §3.7 Strings up to 32767 ASCII characters main/sc/source/core/inc/interpre.hxx:930-936 (CheckStringResultLen vs STRING_MAXLEN); STRING_MAXLEN definition not located in sc headers String overflow checked via CheckStringResultLen against STRING_MAXLEN; exact STRING_MAXLEN value not confirmed in sc module Unverifiable (static); STRING_MAXLEN definition not located Low Locate STRING_MAXLEN definition; runtime test with 32767-char string calcval: BL-003-32767chars — UNVERIFIED +F-GAP-008 §3.7 Strings up to 32767 ASCII characters main/tools/inc/tools/string.hxx:110-120 (STRING_MAXLEN definition); interpr1.cxx:930-936 (CheckStringResultLen) STRING_MAXLEN = 0x7FFFFFFF (2^31-1) with STRING32, 0xFFFF (65,535) without; STRING32 not enabled by default → default STRING_MAXLEN = 65,535 > 32,767 ODF 1.4 minimum; CheckStringResultLen enforces limit at string concatenation Meets ODF 1.4 minimum (65,535 >= 32,767) statically; runtime-unverified Low Runtime test with 32767-c [...] F-GAP-009 §3.7 At least 7 nesting levels of functions No nesting depth limit found in FormulaCompiler or ScInterpreter source No MAXNEST or recursion depth enforcement found Unverifiable (static); absence of limit doesn't prove conformance Low Runtime test with 7+ nested functions calcval: BL-004-7nesting (7 nested IFs) — UNVERIFIED F-GAP-010 §5.5 Operator precedence per Table 1 main/formula/source/core/api/FormulaCompiler.cxx (parser grammar: UnionLine → IntersectionLine → RangeLine → UnaryLine → binary ops) Parser structure exists (RangeLine/IntersectionLine/UnionLine); precedence not verified at runtime Unverifiable (static); parser infrastructure present Medium Runtime precedence test (2+3*4=14, 2^3^2=512) calcval: SYN-005-precedence, SYN-005-power — UNVERIFIED F-GAP-011 §5.8 Reference syntax supported main/sc/source/core/tool/compiler.cxx (PopDoubleRef/PopSingleRef) Cell and range reference handling present in compiler Unverifiable (static); implementation present Low Runtime reference test calcval: SYN-008-ref, SYN-008-range — UNVERIFIED
