<div dir="ltr">It may be a bug, but unless you can provide a *self contained* example that I can easily run (i.e. a main function, not just code snippets), I can't help you.<div><br></div><div>Peter</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Oct 11, 2016 at 3:37 AM, Jong-Ju Park <span dir="ltr"><<a href="mailto:jongjup@sfu.ca" target="_blank">jongjup@sfu.ca</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Dear Peter:<br>
<br>
Thank you for taking your time to respond!<br>
<br>
Consider the following code:<br>
<br>
------------------------------<wbr>------------------------------<wbr>--------<br>
<br>
//buf is some heap array of unsigned 8-bit integers<br>
<br>
//Labels is a global pointer to dfsan_label<br>
labels = malloc(sizeof(*labels) * something);<br>
<br>
int index;<br>
<br>
for (index = 0; index < something; index++) {<br>
    char* desc;<br>
    asprintf(&desc, "%d", index);<br>
    dfsan_label byteLabel = dfsan_create_label(desc, 0);<br>
    dfsan_set_label(byteLabel, &buf[index], 1);<br>
    labels[index] = byteLabel;<br>
}<br>
<br>
<br>
/* The code below will behave differently depending on<br>
 * whether it is within the same function as the for-loop or not<br>
 *<br>
 */<br>
<br>
//-----------------START------<wbr>---------------------<br>
<br>
u_int8_t copy = buf[someIndex];<br>
<br>
dfsan_label bufRegionLabel1 = dfsan_read_label(&buf[<wbr>someIndex], 1);<br>
dfsan_label bufRegionLabel2 = dfsan_get_label(buf[someIndex]<wbr>);<br>
dfsan_label bufRegionLabel3 = dfsan_read_label(&copy, 1);<br>
dfsan_label bufRegionLabel4 = dfsan_get_label(copy);<br>
<br>
assert (bufRegionLabel1 == bufRegionLabel2);<br>
assert (bufRegionLabel2 == bufRegionLabel3);<br>
assert (bufRegionLabel3 == bufRegionLabel4);<br>
<br>
//-----------------END--------<wbr>------------------<br>
<br>
/* The code above will behave differently depending on<br>
 * whether it is within the same function as the for-loop or not<br>
 */<br>
<br>
------------------------------<wbr>------------------------------<wbr>-------------<br>
<br>
The 4 labels, bufRegionLabel1, bufRegionLabel2, bufRegionLabel3, and bufRegionLabel4,<br>
are indeed identical if you have those lines within the same function as the above for-loop;<br>
however, if you have them in a *different* function (of course, assuming that<br>
you pass buf into the said function), then bufRegionLabel2, bufRegionLabel3,<br>
and bufRegionLabel4 will all have (null) and (nil) label and data.<br>
Only bufRegionLabel1 will work as expected.<br>
<br>
Why is this so? What is going on?<br>
<br>
<br>
Sincerely,<br>
<br>
JongJu Park<br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">-- <div>Peter</div></div></div>
</div>