/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
Bech_bb 500
kyllekylle 500
jdjespers.. 500
gibson 300
scootergr.. 300
molokyle 287
10  strarup 270
initialisering
Fra : Leif Neland


Dato : 16-03-11 18:21

I asterisk er der opstået en bug, måske har jeg fundet den
Jeg har ellers ikke lavet noget c i dette millenium, men...

i channels/chan_sip.c linie 12978

I funktionens header er bl.a.
int wildcard_found = 0;
int single_binding_found;

.... senere
if (!strcasecmp(curi, "*")) {
wildcard_found = 1;
} else {
single_binding_found = 1;
}

if (wildcard_found && (ast_strlen_zero(expires) ||
expire != 0 || single_binding_found)) {
....
single_binding_found bliver ikke tildelt andre værdier nogetsteds; men
da den ikke er initialiseret, kan den så ikke indeholde hvadsomhelst?

Leif


 
 
Kent Friis (16-03-2011)
Kommentar
Fra : Kent Friis


Dato : 16-03-11 18:33

Den Wed, 16 Mar 2011 18:20:40 +0100 skrev Leif Neland:
> I asterisk er der opstået en bug, måske har jeg fundet den
> Jeg har ellers ikke lavet noget c i dette millenium, men...
>
> i channels/chan_sip.c linie 12978
>
> I funktionens header er bl.a.
> int wildcard_found = 0;
> int single_binding_found;
>
> ... senere
> if (!strcasecmp(curi, "*")) {
> wildcard_found = 1;
> } else {
> single_binding_found = 1;
> }
>
> if (wildcard_found && (ast_strlen_zero(expires) ||
> expire != 0 || single_binding_found)) {
> ...
> single_binding_found bliver ikke tildelt andre værdier nogetsteds; men
> da den ikke er initialiseret, kan den så ikke indeholde hvadsomhelst?

Jo. En lokal variabel kan indeholde hvad der nu ligger på stack'en eller
i registret.

Af samme grund compiler jeg mit eget kode med gcc -Wall -O1, da det
får compileren til at advare om den type fejl (uden -O1 opdager den ikke
den type fejl).

Mvh
Kent
--
"The Brothers are History"

Arne Vajhøj (17-03-2011)
Kommentar
Fra : Arne Vajhøj


Dato : 17-03-11 01:20

On 16-03-2011 13:33, Kent Friis wrote:
> Den Wed, 16 Mar 2011 18:20:40 +0100 skrev Leif Neland:
>> I asterisk er der opstået en bug, måske har jeg fundet den
>> Jeg har ellers ikke lavet noget c i dette millenium, men...
>>
>> i channels/chan_sip.c linie 12978
>>
>> I funktionens header er bl.a.
>> int wildcard_found = 0;
>> int single_binding_found;
>>
>> ... senere
>> if (!strcasecmp(curi, "*")) {
>> wildcard_found = 1;
>> } else {
>> single_binding_found = 1;
>> }
>>
>> if (wildcard_found&& (ast_strlen_zero(expires) ||
>> expire != 0 || single_binding_found)) {
>> ...
>> single_binding_found bliver ikke tildelt andre værdier nogetsteds; men
>> da den ikke er initialiseret, kan den så ikke indeholde hvadsomhelst?
>
> Jo. En lokal variabel kan indeholde hvad der nu ligger på stack'en eller
> i registret.
>
> Af samme grund compiler jeg mit eget kode med gcc -Wall -O1, da det
> får compileren til at advare om den type fejl (uden -O1 opdager den ikke
> den type fejl).

Det sidste afhænger vist af version (og muligvis platform).

GCC 4.4.2 på win32 giver warning med -Wall uanset -O.

Arne

Kent Friis (17-03-2011)
Kommentar
Fra : Kent Friis


Dato : 17-03-11 17:33

Den Wed, 16 Mar 2011 20:19:35 -0400 skrev Arne Vajhøj:
> On 16-03-2011 13:33, Kent Friis wrote:
>> Den Wed, 16 Mar 2011 18:20:40 +0100 skrev Leif Neland:
>>> I asterisk er der opstået en bug, måske har jeg fundet den
>>> Jeg har ellers ikke lavet noget c i dette millenium, men...
>>>
>>> i channels/chan_sip.c linie 12978
>>>
>>> I funktionens header er bl.a.
>>> int wildcard_found = 0;
>>> int single_binding_found;
>>>
>>> ... senere
>>> if (!strcasecmp(curi, "*")) {
>>> wildcard_found = 1;
>>> } else {
>>> single_binding_found = 1;
>>> }
>>>
>>> if (wildcard_found&& (ast_strlen_zero(expires) ||
>>> expire != 0 || single_binding_found)) {
>>> ...
>>> single_binding_found bliver ikke tildelt andre værdier nogetsteds; men
>>> da den ikke er initialiseret, kan den så ikke indeholde hvadsomhelst?
>>
>> Jo. En lokal variabel kan indeholde hvad der nu ligger på stack'en eller
>> i registret.
>>
>> Af samme grund compiler jeg mit eget kode med gcc -Wall -O1, da det
>> får compileren til at advare om den type fejl (uden -O1 opdager den ikke
>> den type fejl).
>
> Det sidste afhænger vist af version (og muligvis platform).
>
> GCC 4.4.2 på win32 giver warning med -Wall uanset -O.

Det var da på tide det blev rettet.

Mvh
Kent
--
"The Brothers are History"

Arne Vajhøj (17-03-2011)
Kommentar
Fra : Arne Vajhøj


Dato : 17-03-11 01:16

On 16-03-2011 13:20, Leif Neland wrote:
> I asterisk er der opstået en bug, måske har jeg fundet den
> Jeg har ellers ikke lavet noget c i dette millenium, men...
>
> i channels/chan_sip.c linie 12978
>
> I funktionens header er bl.a.
> int wildcard_found = 0;
> int single_binding_found;
>
> ... senere
> if (!strcasecmp(curi, "*")) {
> wildcard_found = 1;
> } else {
> single_binding_found = 1;
> }

> single_binding_found bliver ikke tildelt andre værdier nogetsteds; men
> da den ikke er initialiseret, kan den så ikke indeholde hvadsomhelst?

De mangler helt klart en:
= 0
på single_binding_found.

Til gengæld har de jo så skrevet koden så den kan
håndtere både lowercase og uppercase *.



Arne

Søg
Reklame
Statistik
Spørgsmål : 177554
Tips : 31968
Nyheder : 719565
Indlæg : 6408852
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste