Am Mo., 3. Feb. 2025 um 22:40 Uhr schrieb Jerry James <loganje...@gmail.com>:
>
> On Mon, Feb 3, 2025 at 2:22 PM Michael J Gruber <m...@fedoraproject.org> 
> wrote:
> > So, over at upstream they raised the suspicion that some parts of what
> > I'm linking are compiled with different flags. To recap: I get
> > ```
> > /usr/include/c++/15/bits/stl_vector.h:1262: std::vector<_Tp,
> > _Alloc>::reference std::vector<_Tp, _Alloc>::operator[](size_type)
> > [with _Tp = const char*; _Alloc = std::allocator<const char*>;
> > reference = const char*&; size_type = long unsigned int]: Assertion
> > '__n < this->size()' failed.
> > Aborted (core dumped)
> > ```
> > in a part of code which basically does:
> > ```
> > FZ_FUNCTION std::vector<std::string>
> > pdf_choice_widget_options2(fz_context* ctx, pdf_annot* tw, int
> > exportval)
> > {
> >     int n = pdf_choice_widget_options(ctx, tw, exportval, nullptr);
> >     std::vector<const char*> opts(n);
> >     int n2 = pdf_choice_widget_options(ctx, tw, exportval, &opts[0]);
> >     assert(n2 == n);
> >     std::vector<std::string> ret(n);
> >     for (int i=0; i<n; ++i)
> >     {
> >         ret[i] = opts[i];
> >     }
> >     return ret;
> > }
> > ```
> > Is there anything regarding flags like NDEBUG, GLIBCXX_ASSERTIONS and
> > the like which could make the above throw when the .so is compiled
> > with different flags compared to the code that calls it? Something
> > that appeared with gcc15 or libstdc++ in gcc15?
>
> If n == 0, then &opts[0] is invalid, since opts is an empty vector in
> that case.  The invalid access to the nonexistent zeroth element
> triggers an assertion failure inside operator[] when the code is
> compiled with -D_GLIBCXX_ASSERTIONS.
> --

Thanks! I had stumbled upon &opts[0] before, but my poor C
programmer's mind converted that to opts (as in arrays refs "are"
pointers) and expected the c++ compiler to do the same, when indeed it
is different (for an empty vector with zero elements). I converted
this to opts.data() now, and the first mock build in f42 works.
Hooray!

Cheers
Michael
-- 
_______________________________________________
devel mailing list -- devel@lists.fedoraproject.org
To unsubscribe send an email to devel-le...@lists.fedoraproject.org
Fedora Code of Conduct: 
https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: 
https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org
Do not reply to spam, report it: 
https://pagure.io/fedora-infrastructure/new_issue

Reply via email to