Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 641990 - net-libs/ptlib-2.10.11 - ptclib/podbc.cxx:1220:21: error: no match for ‘operator==’ (operand types are ‘PString’ and ‘char’)
Summary: net-libs/ptlib-2.10.11 - ptclib/podbc.cxx:1220:21: error: no match for ‘opera...
Alias: None
Product: Gentoo Linux
Classification: Unclassified
Component: Current packages (show other bugs)
Hardware: All Linux
: Normal normal (vote)
Assignee: No maintainer - Look at if you want to take care of it
Depends on:
Blocks: gcc-7
  Show dependency tree
Reported: 2017-12-22 00:17 UTC by Martin von Gagern
Modified: 2018-01-26 22:57 UTC (History)
1 user (show)

See Also:
Package list:
Runtime testing required: ---

emerge --info (net-libs:ptlib-2.10.11.emerge--info,9.81 KB, text/plain)
2017-12-22 00:17 UTC, Martin von Gagern
Patch to call IsEmpty (gentoo641990a.patch,1.10 KB, patch)
2017-12-22 00:32 UTC, Martin von Gagern
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Martin von Gagern 2017-12-22 00:17:21 UTC
Created attachment 511428 [details]
emerge --info

ptclib/podbc.cxx: In member function ‘PString PODBCRecord::GetLongData(PINDEX)’:
ptclib/podbc.cxx:1220:21: error: no match for ‘operator==’ (operand types are ‘PString’ and ‘char’)
   if (sbin.Right(1) == '\0')   // Remove Null Char
In file included from /var/tmp/portage/net-libs/ptlib-2.10.11/work/ptlib-2.10.11/include/ptlib/contain.h:624:0,
                 from /var/tmp/portage/net-libs/ptlib-2.10.11/work/ptlib-2.10.11/include/ptlib.h:56,
                 from ptclib/podbc.cxx:35:
/var/tmp/portage/net-libs/ptlib-2.10.11/work/ptlib-2.10.11/include/ptlib/pstring.h:911:10: note: candidate: bool PString:
:operator==(const char*) const <near match>
     bool operator==(
/var/tmp/portage/net-libs/ptlib-2.10.11/work/ptlib-2.10.11/include/ptlib/pstring.h:911:10: note:   conversion of argument 1 would be ill-formed:
ptclib/podbc.cxx:1220:24: error: invalid conversion from ‘char’ to ‘const char*’ [-fpermissive]
   if (sbin.Right(1) == '\0')   // Remove Null Char

The offending piece of code has disappeared from the upstream codebase in
the former of which is in master, the latter in recent tags starting at v2_12_0 from October 2012. v2_16_2 is the latest upstream tag following this pattern. suggests that stable ekiga 4.0.x still requires ptlib 2.10 so just bumping to later versions and dropping the older ones might not be a sufficient solution.
Comment 1 Martin von Gagern 2017-12-22 00:32:36 UTC
Created attachment 511430 [details, diff]
Patch to call IsEmpty

I've tried to work out what the code actually was doing in those gcc versions where it did compile.  My assumption is that '\0' would get treated as ((const char*)null_ptr).

include/ptlib/contain.inl says PString::operator==(const char *cstr)
does an InternalCompare invocation which is implemented in
src/ptlib/common/contain.cxx. That has an explicit check for NULL, and
in that case will do an IsEmpty() check, which in turn tests for NULL
array or '\0' at beginning of array.

This the proposed fix is to call IsEmpty directly.

Together with the patch from bug 638122 comment 8 this made the package compile. Not tested at runtime, and haven't performed build time tests either.
Comment 2 Mikle Kolyada archtester Gentoo Infrastructure gentoo-dev Security 2018-01-26 22:57:57 UTC