This was probably intended as a helper to facilitate reference counted
pointers, but this isn't used anywhere, and the only "allocator" in use
is the default wrapper around `delete`. If reference counted pointers
are ever relevant, they can be done using a shared_ptr.
Change-Id: I2adb561b76efcaf5fb119939f25a7c2438196a5b
Obviously the intent was to have reference-counted pointers as table
value, but this isn't used anywhere, and anyway would be better
implemented using a shared_ptr.
Change-Id: I4df6e874d402d615f654f3a8df3195fe6dda46bb
Temporarily releasing the lock only to immediately re-acquire it, just
because the called function does a lock/unlock, without re-checking all
data that is protected by the lock, opens the door to subtle race
conditions. Change the semantics of removeRegistration() to require
being called with the lock held. Update handleRegistrationTimer() to
also not release and re-acquire the lock.
Change-Id: Ib7562ae138b55d0ef83ec142706ec6415037fc2a
Cover the whole conditioning with the lock,
because otherwise two threads competing on execution
can suddenly come across the `(m_playout_type != type)` getting
true (for both) and one of them by acquiring the lock can potentially
manage to modify that, what can actually make `(m_playout_type != type)`
not true anymore for the other thread in race condition here.
Change-Id: Ie352da10a515837efc696063837b70dc2c9a304d
Refactor it so, that it's not possible to go over what
`unsigned long` offers (so 4,294,967,295).
We are accumulating read bytes there, which can potentially
be more than proposed 4,3Gb, for that case check out if
the possible end result will overflow and close connection
if this is likely to happen.
Change-Id: I4e758292e77649ddfbcaaa7f8dc9f133e74c4600
Make it quasi infinite, on cases with wrong
read of config parameter `cps_limit`,
so that if int has undefined value it doesn't
suddenly cause undefined behavior of the license
limitation agent.
Change-Id: If1ca5442135793929eb96d47642ea4314cd82803
Before using the `clock_rate` or `payload_type`
always initialize, because might be used non-defined,
which will give whatever value.
Fixes:
Uninitialized scalar variable (UNINIT)
35. uninit_use_in_call: Using uninitialized
value (int)clock_rate when calling SdpPayload.
Change-Id: Ie7cea4289ace93a169ad2dce8a402b9a469c65f8
Rework the `nbWrite()` function so, that it gets safe
in terms of:
- operating on data written/data remaining integers
- has protection guards for extra big chunks to write at once
Refactor to use size_t/ssize_t instead of primitive int,
where possible (e.g. bytesWritten).
Let the `nbWrite()` use reference instead of pointer
for the bytes written parameter.
Fixes Coverity Scan report:
4. tainted_data_return: Called function write(fd, sp, nToWrite),
and a possible return value may be less than zero.
5. cast_overflow: An assign that casts to a different type,
which might trigger an overflow.
Overflowed integer argument (INTEGER_OVERFLOW)
13. overflow_sink: nToWrite, which might have overflowed,
is passed to write(fd, sp, nToWrite).
7. overflow: The expression nToWrite is considered
to have possibly overflowed.
Change-Id: I32aa6aae5ef5715d61a91714e62b0a094bc03f21
As long as the `TypeInt` is actually a long primitive,
and we tend to switch using the long type everywhere
within xml implementation, then
there is no need to support both `int` and `long`
types, just force users to be on `long` always.
Refactor the user code accordingly.
Change-Id: I5c5b032a824a84f69f99dc7c755d0da745a9a068
As this is only a syntactic sugar there is no difference,
but from the style perspective the project tends to
use C++ style.
Change-Id: I3636c48163b3d262b272b5088e03c074e49a9ec3
Properly select the equal operator based on long instead.
Otherwise it selects the `ValueStruct` as the latest
possible from the variant based `_value` and eventually
it gets stumbled over `[]` operator for
building structs which asserts it.
Change-Id: Ib9a4fe9c66ff02554a84451df8aa940fe766fedc
Don't try to double free the `_ssl_ssl` and `_ssl_ctx`
provided by `XmlRpcSource`, because this job
is already done by `XmlRpcSource::close()`.
Additionally:
- add a separate non-null check for the _ssl_ctx freeing
- move log lines from `XmlRpcClient::close()` to `XmlRpcSource::close()`
Change-Id: Ifef799fa6a0ffa65b60415f39c51f4b54ff4bb14
Additional logic around these two objects to free it during the
destruction phase.
Also add NULLing for the according pointers in other places
which might also free it before the destructor takes place,
which would lead otherwise to a double free attempt.
Change-Id: I046a660e4b1467a7093dbf2c0c3170a950d5f607
Don't appeal to the XmlRpcSource's members (e.g. `_ssl`)
if this has been freed via `this`.
To check this out see controllable delete behavior
via introduced getter `getsDeletedOnClose()`.
Should fix:
freed_arg: close frees this.
CID 542402: (#1 of 1): Read from pointer after free (USE_AFTER_FREE)
use_after_free: Using freed pointer this.
Change-Id: I8f23564957c57491db8cf051e7296671bf2a698a
The memory referenced via it could have been freed already
(by the `update_uac_request()`). Set the original pointer to NULL
and check in the caller's function if it has been assigned to NULL
before actually using.
Fixes:
Read from pointer after free (USE_AFTER_FREE)
41. deref_after_free: Dereferencing freed pointer p_msg.
Change-Id: I07ee9360f996c8723ba46c99f512ef9562ff75c3
To be able to set msg's ptr to NULL in the `update_uac_request()`
after the memory referenced via it is freed.
Change-Id: Id8d89a6a64b78e5fd06d43e0b99aaf83c4623908
For newly created call profiles use the move operation
instead of copy one.
Fixes:
CID 542292:Variable copied when it could be moved (COPY_INSTEAD_OF_MOVE)
Change-Id: Ia130fc3e32d23e63f3d41fc6261e90ecf742ecf7
Let STL handle memory management and type safety.
In the future this can be refactored further to eliminate the "Type"
enum and value, as the variant itself keeps this information.
Fix white spacing.
Change-Id: I6e903b51de339b686ba89bb7ae81f4d86eb66bc0
Store integers as long to reduce likelihood of overflows. Retain
overloaded accessors for compatibility.
Use time_t and suseconds_t for timestamps.
Fix up formatting strings to match the new types and to also fix
incorrect formatting of decimal values.
Remove unused methods.
Change-Id: I58bfcd8a34bef2363eac06242dfedf6aae8451e0
Create the unique pointer based on the AmSession raw
pointer right away and assign, instead of doing
separately the declaration and initialization.
Change-Id: I71cd7084ae03768431b1eded130b0c70d58db78b
To make the Coverity Scan happy and also
make the code a bit more excplicit in terms of
managing the ownership over the session in
(`startSessionUAS()` and `startSessionUAC()`)
just add a code commentary describing what's going on.
Change-Id: I6383c50bf99cbacc29cd77085b787c51bdbee039
startSessionUAC():
Move the session smart pointer into the try statement,
on the same manner as done in `startSessionUAS()`.
Change-Id: I34d9176fd9c740614f822083b4a3f2dcde53b0f8
Make it using spaces, instead of the EMACS based
tabulation/space combination, which makes it
messy for modern IDEs.
Change-Id: I44b632a5a3a5451bee58726370d907e3634ea709
When building up the AmSession and assigning
the app parameters to it, do the move operation
instead of copying.
Fixes defect:
569 // ... and do nothing !
570
571 DBG("onInvite/onRefer returned NULL\n");
572 }
573 else {
574 // save session parameters
>>> CID 550234: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
>>> "app_params" is copied in call to copy assignment for class
"std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >,
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >,
std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >,
std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > > > >", when it could be moved instead.
575 session->app_params = app_params;
576 }
577
578 return session;
579 }
580
Change-Id: I3502a4c36ab6ef24fe53d57e2d5fb01777232b2b
Instead of copying the FilterEntry mf, do the move.
Fixes defect:
329 vector<string> elems = explode(value, ",");
330 for (vector<string>::iterator it=elems.begin(); it != elems.end(); it++)
331 {
332 mf.filter_list.insert(*it);
333 }
334 mf.filter_type = Undefined;
>>> CID 550235: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
>>> "mf" is copied and then passed-by-reference as parameter to STL insertion function
"std::vector<FilterEntry, std::allocator<FilterEntry> >::push_back(
std::vector<FilterEntry, std::allocator<FilterEntry> >::value_type const &)",
when it could be moved instead.
335 profile->messagefilter.push_back(mf);
336 DBG("message_list set to '%s'\n", value.c_str());
337 EXEC_ACTION_STOP;
338 }
339
340 }
Change-Id: If6d04432f7004993fb1c70a0a026799805ed2a1a
We are now ready to use the default constructors and assignment
operators. Add move semantics as well.
Change-Id: I89738bff6498979ff9df6bfe1f9489568c4564cf
Directly contain the ValueArray in the variant instead of manually
managing a pointer. Requires updating the return type of some const
functions to also be const, which in turn requires some of their users
to have the type const qualified as well.
Change-Id: I2ec31d659eef521a3f68d642ee431b5c38f27fdf
Update the AmArg argument to const as these functions never change it,
and it may come from a const source. (The `string` counterpart in the
other overload is already const qualified.)
Change-Id: I1e527425a70e0c6468b8b59de7e4a20fa1f5c218
When dereferencing it (after creating a new context before)
make sure it's not NULL even when just checking for
a connection error, as it might still be NULL and hence
will just seg.fault in this case.
Fixes:
Dereference before null check (REVERSE_INULL)
check_after_deref: Null-checking this->redis_context suggests
that it may be null, but it has already been dereferenced on all paths leading to the check.
Change-Id: I67f88f1dfccef66751298b1c26e85efba0458c1f
size_t will always be true against `>=` because
it's a typedef for unsigned long.
Makes no sense to check it, just log what it is.
Fixes: Unsigned compared against 0 (NO_EFFECT)
unsigned_compare: This greater-than-or-equal-to-zero comparison
of an unsigned value is always true. reply->len >= 0UL.
Change-Id: I75803cbe0760a1b5c4a0d056af86bc992ea0a110
Add a default case for `handle_redis_reply()`.
Fixes:
Dereference after null check (FORWARD_NULL)
4. var_deref_op: Dereferencing null pointer reply.
Change-Id: I22edbc3cb14f7e8662efe4c607e1502fbb8c56b6