Regarding authentication scheme handling

"Pallavi Agrawal" <[email protected]> Wed, 18 Mar 2009 19:59:40 +0530
Newsgroups gmane.comp.lib.libwww
Message-ID <[email protected]>
This is a multi-part message in MIME format.

------=_NextPart_000_0071_01C9A804.12CE5F20
Content-Type: text/plain;
	charset="us-ascii"
content-transfer-encoding: 7bit

Hi,

 

I am working on libwww.

 

I have one query related to libwww handling of NTLM responses for
authentication.

Looking at the code in HTInit.c, it seems that only "basic" and "digest"
authentication schemes are supported.

 

PUBLIC void HTAAInit (void)

{

 

    HTAA_newModule ("basic", HTBasic_generate, HTBasic_parse, NULL,

                             HTBasic_delete);

#ifdef HT_MD5

    HTAA_newModule ("digest", HTDigest_generate, HTDigest_parse, 

                             HTDigest_updateInfo,  HTDigest_delete);

#endif /* HT_MD5 */

}

 

HTAuthInfoFilter function checks for the available modules(which are basic
and digest in this case). If the current scheme doesn't match with any of
them, it will return HT_ERROR. In HTNetcall_executeAfter, this return type
is not handled going further up.

 

PUBLIC int HTNetCall_executeAfter (HTList * list, HTRequest * request,

                                                   int status)

{

    int ret = HT_OK;

    if (status != HT_IGNORE) {

            HTParentAnchor * anchor = HTRequest_anchor(request);

            char * url = HTAnchor_physical(anchor);

            char * addr = url ? url : HTAnchor_address((HTAnchor *) anchor);

            HTResponse * response = HTRequest_response(request);

            if (list && request && addr) {

                AfterFilter * pres;

                while ((pres = (AfterFilter *) HTList_nextObject(list))) {

                        if ((pres->status == status || pres->status ==
HT_ALL) &&

                            (!pres->tmplate ||

                             (pres->tmplate && HTStrMatch(pres->tmplate,
addr)))) {

                            HTTRACE(CORE_TRACE, "Net After... calling %p
(request %p, response %p, status %d, context %p)\n" _ 

                                                pres->after _ request _
response _ 

                                                status _ pres->param);

                            ret = (*pres->after)(request, response,
pres->param, status);

                            if (ret != HT_OK) break;

 

                            /*

                            **  Update the address to match against if the
filter changed

                            **  the physical address.

                            */

                            if ((url = HTAnchor_physical(anchor))) addr =
url;

                        }

                }

            }

          

 

            if (!url) {

                        HT_FREE(addr); 

            }

    }

    return ret;

}

There are many places in code where the return type from this function is
not handled.

For example in function HTNet_newClient, following code doesn't handle the
return value:

if (HTEvent_isCallbacksRegistered() && !HTRequest_preemptive(request))

                createAfterFilterEvent(request, status);

            else

                HTNet_executeAfterAll(request, status);

            return YES;

This is resulting into browser getting hung and the select call in
HTEvtLst_loop doesn't return. 

 

Please let me know if we have any solution to this problem. 

 

Thanks and Regards,

Pallavi Agrawal,

Project Engineer

PDC-1 ,Wipro Technologies

 

 


Please do not print this email unless it is absolutely necessary. 

The information contained in this electronic message and any attachments to this message are intended for the exclusive use of the addressee(s) and may contain proprietary, confidential or privileged information. If you are not the intended recipient, you should not disseminate, distribute or copy this e-mail. Please notify the sender immediately and destroy all copies of this message and any attachments. 

WARNING: Computer viruses can be transmitted via email. The recipient should check this email and any attachments for the presence of viruses. The company accepts no liability for any damage caused by any virus transmitted by this email. 

www.wipro.com

------=_NextPart_000_0071_01C9A804.12CE5F20
Content-Type: text/html;
	charset="us-ascii"
content-transfer-encoding: quoted-printable

<html xmlns:o=3D"urn:schemas-microsoft-com:office:office" xmlns:w=3D"urn:sch=
emas-microsoft-com:office:word" xmlns=3D"http://www.w3.org/TR/REC-html40">

<head>
<META HTTP-EQUIV=3D"Content-Type" CONTENT=3D"text/html; charset=3Dus-ascii">
<meta name=3DGenerator content=3D"Microsoft Word 11 (filtered medium)">
<style>
<!--
 /* Font Definitions */
 @font-face
	{font-family:"Bookman Old Style";
	panose-1:2 5 6 4 5 5 5 2 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0in;
	margin-bottom:.0001pt;
	font-size:12.0pt;
	font-family:"Times New Roman";}
a:link, span.MsoHyperlink
	{color:blue;
	text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
	{color:purple;
	text-decoration:underline;}
span.EmailStyle17
	{mso-style-type:personal-compose;
	font-family:Arial;
	color:windowtext;}
@page Section1
	{size:8.5in 11.0in;
	margin:1.0in 1.25in 1.0in 1.25in;}
div.Section1
	{page:Section1;}
-->
</style>

</head>

<body lang=3DEN-US link=3Dblue vlink=3Dpurple>

<div class=3DSection1>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span style=3D'font-size:10=
..0pt;
font-family:Arial'>Hi,<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span style=3D'font-size:10=
..0pt;
font-family:Arial'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span style=3D'font-size:10=
..0pt;
font-family:Arial'>I am working on libwww.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span style=3D'font-size:10=
..0pt;
font-family:Arial'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span style=3D'font-size:10=
..0pt;
font-family:Arial'>I have one query related to libwww handling of NTLM
responses for authentication.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span style=3D'font-size:10=
..0pt;
font-family:Arial'>Looking at the code in HTInit.c, it seems that only
&#8220;basic&#8221; and &#8220;digest&#8221; authentication schemes are
supported.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'><o:p>&nbsp;</o:p></span></font></i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>PUBLIC void HTAAInit (void)<o:p></o:p><=
/span></font></i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>{<o:p></o:p></span></font></i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'><o:p>&nbsp;</o:p></span></font></i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>&nbsp;&nbsp;&nbsp; HTAA_newModule
(&quot;basic&quot;, HTBasic_generate, HTBasic_parse, NULL,<o:p></o:p></span>=
</font></i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp; HTBasic_delete);<o:p></o:p></span></font></i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>#ifdef HT_MD5<o:p></o:p></span></font><=
/i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>&nbsp;&nbsp;&nbsp; HTAA_newModule
(&quot;digest&quot;, HTDigest_generate, HTDigest_parse, <o:p></o:p></span></=
font></i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp; HTDigest_updateInfo,&nbsp; HTDigest_delete);<o:p></=
o:p></span></font></i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>#endif /* HT_MD5 */<o:p></o:p></span></=
font></i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>}<o:p></o:p></span></font></i></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span style=3D'font-size:10=
..0pt;
font-family:Arial'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span style=3D'font-size:10=
..0pt;
font-family:Arial'>HTAuthInfoFilter function checks for the available
modules(which are basic and digest in this case). If the current scheme
doesn&#8217;t match with any of them, it will return HT_ERROR. In
HTNetcall_executeAfter, this return type is not handled going further up.<o:=
p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span style=3D'font-size:10=
..0pt;
font-family:Arial'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>PUBLIC int HTNetCall_executeAfter (HTLi=
st
* list, HTRequest * request,<o:p></o:p></span></font></i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;
&nbsp;&nbsp; int status)<o:p></o:p></span></font></i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>{<o:p></o:p></span></font></i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>&nbsp;&nbsp;&nbsp; int ret =3D HT_OK;<o=
:p></o:p></span></font></i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>&nbsp;&nbsp;&nbsp; if (status !=3D
HT_IGNORE) {<o:p></o:p></span></font></i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;
HTParentAnchor * anchor =3D HTRequest_anchor(request);<o:p></o:p></span></fo=
nt></i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;
char * url =3D HTAnchor_physical(anchor);<o:p></o:p></span></font></i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;
char * addr =3D url ? url : HTAnchor_address((HTAnchor *) anchor);<o:p></o:p=
></span></font></i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;
HTResponse * response =3D HTRequest_response(request);<o:p></o:p></span></fo=
nt></i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;
if (list &amp;&amp; request &amp;&amp; addr) {<o:p></o:p></span></font></i><=
/p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; AfterFilter * pres;<o:p></o:p></span></font></i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; while ((pres =3D (AfterFilter *) HTList_nextObject(list))=
) {<o:p></o:p></span></font></i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;
if ((pres-&gt;status =3D=3D status || pres-&gt;status =3D=3D HT_ALL) &amp;&a=
mp;<o:p></o:p></span></font></i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; (!pres-&gt;tmplate ||<o:p></o:p></span></font></i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp; (pres-&gt;tmplate &amp;&amp;
HTStrMatch(pres-&gt;tmplate, addr)))) {<o:p></o:p></span></font></i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; HTTRACE(CORE_TRACE, &quot;Net After... calling %p (reques=
t
%p, response %p, status %d, context %p)\n&quot; _ <o:p></o:p></span></font><=
/i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;
pres-&gt;after _ request _ response _ <o:p></o:p></span></font></i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;
status _ pres-&gt;param);<o:p></o:p></span></font></i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; ret =3D (*pres-&gt;after)(request, response, pres-&gt;par=
am,
status);<o:p></o:p></span></font></i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;
<b><span style=3D'font-weight:bold'>&nbsp;&nbsp;&nbsp; if (ret !=3D HT_OK) b=
reak;<o:p></o:p></span></b></span></font></i></p>

<p class=3DMsoNormal><b><i><font size=3D2 face=3DArial><span style=3D'font-s=
ize:10.0pt;
font-family:Arial;font-weight:bold;font-style:italic'><o:p>&nbsp;</o:p></spa=
n></font></i></b></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; /*<o:p></o:p></span></font></i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; **&nbsp; Update the address to match against if the filte=
r
changed<o:p></o:p></span></font></i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; **&nbsp; the physical address.<o:p></o:p></span></font></=
i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; */<o:p></o:p></span></font></i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; if ((url =3D HTAnchor_physical(anchor))) addr =3D url;<o:=
p></o:p></span></font></i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;
}<o:p></o:p></span></font></i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; }<o:p></o:p></span></font></i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;
}<o:p></o:p></span></font></i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;
<o:p></o:p></span></font></i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'><o:p>&nbsp;</o:p></span></font></i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;
if (!url) {<o:p></o:p></span></font></i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;
HT_FREE(addr); <o:p></o:p></span></font></i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;
}<o:p></o:p></span></font></i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>&nbsp;&nbsp;&nbsp; }<o:p></o:p></span><=
/font></i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>&nbsp;&nbsp;&nbsp; return ret;<o:p></o:=
p></span></font></i></p>

<p class=3DMsoNormal><i><font size=3D2 face=3DArial><span style=3D'font-size=
:10.0pt;
font-family:Arial;font-style:italic'>}<o:p></o:p></span></font></i></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span style=3D'font-size:10=
..0pt;
font-family:Arial'>There are many places in code where the return type from
this function is not handled.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span style=3D'font-size:10=
..0pt;
font-family:Arial'>For example in function HTNet_newClient, following code
doesn&#8217;t handle the return value:<o:p></o:p></span></font></p>

<p class=3DMsoNormal><b><i><font size=3D2 face=3DArial><span style=3D'font-s=
ize:10.0pt;
font-family:Arial;font-weight:bold;font-style:italic'>if
(HTEvent_isCallbacksRegistered() &amp;&amp; !HTRequest_preemptive(request))<=
o:p></o:p></span></font></i></b></p>

<p class=3DMsoNormal><b><i><font size=3D2 face=3DArial><span style=3D'font-s=
ize:10.0pt;
font-family:Arial;font-weight:bold;font-style:italic'>&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; createAfterFilterEvent(request, status);<o:p></o:p></span=
></font></i></b></p>

<p class=3DMsoNormal><b><i><font size=3D2 face=3DArial><span style=3D'font-s=
ize:10.0pt;
font-family:Arial;font-weight:bold;font-style:italic'>&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
else<o:p></o:p></span></font></i></b></p>

<p class=3DMsoNormal><b><i><font size=3D2 face=3DArial><span style=3D'font-s=
ize:10.0pt;
font-family:Arial;font-weight:bold;font-style:italic'>&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; HTNet_executeAfterAll(request, status);<o:p></o:p></span>=
</font></i></b></p>

<p class=3DMsoNormal><b><i><font size=3D2 face=3DArial><span style=3D'font-s=
ize:10.0pt;
font-family:Arial;font-weight:bold;font-style:italic'>&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return YES;</span></font></i></b><font size=3D2 face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial'><o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span style=3D'font-size:10=
..0pt;
font-family:Arial'>This is resulting into browser getting hung and the selec=
t
call in HTEvtLst_loop doesn&#8217;t return. <o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span style=3D'font-size:10=
..0pt;
font-family:Arial'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span style=3D'font-size:10=
..0pt;
font-family:Arial'>Please let me know if we have any solution to this proble=
m. <o:p></o:p></span></font></p>

<p class=3DMsoNormal><b><i><font size=3D2 face=3DArial><span style=3D'font-s=
ize:10.0pt;
font-family:Arial;font-weight:bold;font-style:italic'><o:p>&nbsp;</o:p></spa=
n></font></i></b></p>

<p class=3DMsoNormal><font size=3D2 color=3Dmaroon face=3D"Bookman Old Style=
"><span
style=3D'font-size:10.0pt;font-family:"Bookman Old Style";color:maroon'>Than=
ks
and Regards,</span></font><font face=3DArial><span style=3D'font-family:Aria=
l'><o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 color=3Dmaroon face=3D"Bookman Old Style=
"><span
style=3D'font-size:10.0pt;font-family:"Bookman Old Style";color:maroon'>Pall=
avi
Agrawal,</span></font><font face=3DArial><span style=3D'font-family:Arial'><=
o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 color=3Dmaroon face=3D"Bookman Old Style=
"><span
style=3D'font-size:10.0pt;font-family:"Bookman Old Style";color:maroon'>Proj=
ect
Engineer</span></font><font face=3DArial><span style=3D'font-family:Arial'><=
o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 color=3Dmaroon face=3D"Bookman Old Style=
"><span
style=3D'font-size:10.0pt;font-family:"Bookman Old Style";color:maroon'>PDC-=
1
,Wipro Technologies</span></font><font face=3DArial><span style=3D'font-fami=
ly:
Arial'><o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D3 face=3DArial><span style=3D'font-size:12=
..0pt;
font-family:Arial'>&nbsp;<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span style=3D'font-size:10=
..0pt;
font-family:Arial'><o:p>&nbsp;</o:p></span></font></p>

</div>

<P><strong><span style=3D'font-size:10.0pt;font-family:=0A=
"Palatino Linotype","serif";color:green'> Please do not print this email unl=
ess it is absolutely necessary. </span></strong><span style=3D'font-family:"=
Arial","sans-serif"'><o:p></o:p></span></p>=0A=
=0A=
=0A=
<p> The information contained in this electronic message and any attachments=
 to this message are intended for the exclusive use of the addressee(s) and=
 may contain proprietary, confidential or privileged information. If you are=
 not the intended recipient, you should not disseminate, distribute or copy=
 this e-mail. Please notify the sender immediately and destroy all copies of=
 this message and any attachments. </p>=0A=
=0A=
<p>WARNING: Computer viruses can be transmitted via email. The recipient sho=
uld check this email and any attachments for the presence of viruses. The co=
mpany accepts no liability for any damage caused by any virus transmitted by=
 this email. </p>=0A=
<p>=0A=
www.wipro.com=0A=
</p>
</body>

</html>

------=_NextPart_000_0071_01C9A804.12CE5F20--