Commits

Searching for commits

Mercurial supports a functional language for selecting a set of
revisions.

The language supports a number of predicates which are joined by
infix operators. Parenthesis can be used for grouping.

Identifiers such as branch names must be quoted with single
or double quotes if they contain characters outside of
[._a-zA-Z0-9\x80-\xff] or if they match one of the
predefined predicates.

Prefix operators

not x

Changesets not in x. Short form is ! x.

Infix operators

x::y

A DAG range, meaning all changesets that are descendants
of x and ancestors of y, including x and y themselves.
If the first endpoint is left out, this is equivalent to
ancestors(y), if the second is left out it
is equivalent to descendants(x).

An alternative syntax is x..y.

x:y

All changesets with revision numbers between x and y, both
inclusive. Either endpoint can be left out, they default to
0 and tip.

x and y

The intersection of changesets in x and y. Short form is
x & y.

x or y

The union of changesets in x and y. There are two alternative
short forms: x | y and x + y.

x - y

Changesets in x but not in y.

Predicates

all()

All changesets, the same as 0:tip.

ancestor(single, single)

Greatest common ancestor of the two changesets.

ancestors(set)

Changesets that are ancestors of a changeset in set.

author(string)

Alias for user(string).

bookmark([name])

The named bookmark or all bookmarks.

branch(set)

All changesets belonging to the branches of changesets in set.

children(set)

Child changesets of changesets in set.

closed()

Changeset is closed.

date(interval)

Changesets within the interval, see hg help dates.

descendants(set)

Changesets which are descendants of changesets in set.

file(pattern)

Changesets affecting files matched by pattern.

follow()

An alias for ::. (ancestors of the working copy's
first parent).

grep(regex)

Like keyword(string) but accepts a regex. Use
grep(r'...') to ensure special escape characters
are handled correctly.

Fix remotely exploitable stack overflow in HTTP manager
There exists a remotely exploitable stack buffer overflow in HTTP digest
authentication handling in Asterisk. The particular method in question
is only utilized by HTTP AMI. When parsing the digest information, the
length of the string is not checked when it is copied into temporary buffers
allocated on the stack.
This patch fixes this behavior by parsing out pre-defined key/value pairs
and avo…

Fix remotely exploitable stack overrun in Milliwatt
Milliwatt is vulnerable to a remotely exploitable stack overrun when using
the 'o' option. This occurs due to the milliwatt_generate function not
accounting for AST_FRIENDLY_OFFSET when calculating the maximum number of
samples it can put in the output buffer.
This patch resolves this issue by taking into account AST_FRIENDLY_OFFSET
when determining the maximum number of samples allowed. Note t…

Add missing connected line macro calls to initial dial for Dial and Queue apps.
The connected line interception macros do not get executed when the
outgoing channel is initially created and that channel's caller-id is
implicitly imported into the incoming channel's connected line data. If
you are using the interception macros, you would expect that they get run
for every change to a channel's connected line information outside of
normal dialplan execution.
Review: https://r…

udptl: Ensure fec[] in udptl_build_packet() is initialized.
Scan results indicated that this array could be used uninitialized. At a quick
look, it looks correct. In any case, initializing it is a Good Thing (tm).

app.h: Always initialize AST_DECLARE_APP_ARGS().
This patch ensures that the struct defined by AST_DECLARE_APP_ARGS() is always
fully initialized. I'm not sure if this fixes any real bugs, but it silences
a bunch of warnings from coverity, and is generally a good thing to do anyway.

Fix deadlock potential with some ast_indicate/ast_indicate_data calls.
Calling ast_indicate()/ast_indicate_data() with the channel lock held can
result in a deadlock with a local channel because of how local channels
need to avoid deadlock.

Fix incorrect jitter buffer overflow due to missed resynchronizations
When a change in time occurs, such that the timestamps associated with frames
being placed into an adaptive jitter buffer (implemented in jitterbuf.c)
are significantly different then the previously inserted frames, the jitter
buffer checks to see if it needs to be resynched to the new time frame. If
three consecutive packets break the threshold, the jitter buffer resynchs
itself to the new times…

Fix Dial m and r options and forked calls generating warnings for voice frames.
When connected line support was added, the wait_for_answer() variable
single changed its meaning slightly. Unfortunately, the places where
single was used did not necessarily get updated to reflect that change.
Also audio/video frames were sent to all forked calls when the endpoints
were never made compatible.
* Don't pass audio/video media frames when the channels have not been made
compatible.…

Fix bogus reads/writes of console log levels in asterisk.c
This patch updates the NUMLOGLEVELS define in logger.h to 32, to match the fact
that logger.c implements 32 log levels (because of the custom log level stuff).
asterisk.c uses this define to size an array of levels per remote console.
This array is modified in ast_console_toggle_loglevel(), which is called by the
"logger set level" CLI command. While the documentation for the CLI command
doesn't…

Fix invalid reads/writes due to incorrect sizeof().
These few places in the code used sizeof() on h_addr in struct hostent.
This is sizeof(char *). The correct way to get the size of this address is to
use h_length. This error would result in reads/writes of 8 bytes instead of 4
on 64-bit machines.

Fix incorrect sizeof() usage in features.c.
This didn't actually result in a bug anywhere, luckily. The only place
where the result of these memcpys was used is in app_dial, and the only
field that it read out of ast_call_feature was the first one, which is an
int, so these memcpys always copied just enough to avoid a problem.

Remove chan_usbradio and app_rpt.
These modules are being maintained outside of the tree and have been for a long
time now, so it doesn't make sense to keep them here.
Review: https://reviewboard.asterisk.org/r/1764/

Make hints for invalid SIP devices return Unavail, not idle
This patch drastically simplifies the device state aggegation code.
The old method was not only overly complex, but also made it impossible
to return AST_DEVICE_INVALID from the aggregation code. The unit test
update is as a result of fixing that bug.
The SIP change stems from a bug introduced by removing a DNS lookup
for hostname-based SIP channels.
(closes issue ASTERISK-16702)
Review: https:/…

Enable macros in 1.8 to find the next highest "h" extension in a context, like in 1.4.
This change restores functionality that was present in 1.4, when AEL macros
were implemented with the Macro dialplan application. Macros are fraught with
functionality issues, because they consume a large portion of the underlying
application stack. This limits the ability of AEL users to call many layers
of subroutines, an issue which Gosub does not have (originally tested to
100,000 levels dee…

Make transfer not ignore port information with SIP.
Attempting to transfer with SIP to an address like 1XXXXX@ip.ad.re.ss:5061 would fail
because port would be cut from the host string and ignored. This simply keeps chan_sip
from cutting off the port number during these kinds of transfers.
(closes issue ASTERISK-19321)
Reported by: Federico Alves
Review: https://reviewboard.asterisk.org/r/1790/diff/#index_header

Return g729 and g723.1 frames with the number of samples set properly.
If the wctc4xxp returns more than a single packet, we need to update the number
of samples in the returned frame accordingly.
Acked-by: Shaun Ruffell <sruffell@digium.com>