Hi Zhenbo,

This is better, but:

On 04/26/14 05:12, Zhenbo Li wrote:
+    hres = var2str(&v, &val);
+
+    if (hres != S_OK){
+        ERR("Set Width(%s) failed when initializing a nsAString!\n",
+            debugstr_variant(&v));
+        nsAString_Finish(&val);

Again, this is not initialized in the error case.

+        return hres;
+    }
+
+    nsres = nsIDOMHTMLTableElement_SetWidth(This->nstable, &val);
+    nsAString_Finish(&val);
+
+    if (NS_FAILED(nsres)){
+        ERR("Set Width(%s) failed!\n", debugstr_variant(&v));
+        return E_FAIL;
+    }
+
+    return S_OK;
 }
 
 static HRESULT WINAPI HTMLTable_get_width(IHTMLTable *iface, VARIANT *p)
 {
     HTMLTable *This = impl_from_IHTMLTable(iface);
-    FIXME("(%p)->(%p)\n", This, p);
-    return E_NOTIMPL;
+    nsAString val;
+    BSTR bstr;
+    nsresult nsres;
+    HRESULT hres;
+
+    TRACE("(%p)->(%p)\n", This, p);
+    nsAString_Init(&val, NULL);
+    nsres = nsIDOMHTMLTableElement_GetWidth(This->nstable, &val);
+    if (NS_FAILED(nsres)){
+        ERR("Get Width(%s) failed!\n", debugstr_variant(p));
+        nsAString_Finish(&val);
+        return E_FAIL;
+    }
+
+    hres = nsstr_to_truncated_bstr(&val, &bstr);
+    if (FAILED(hres)) {
+        SysFreeString(bstr);

And bstr is not initialized in error case.

Also, as Dmitry pointed, you don't check for some errors in var2str.

Jacek