diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c
index 04ca05c8aae..6a9d3965485 100644
--- a/dlls/mshtml/htmlelem.c
+++ b/dlls/mshtml/htmlelem.c
@@ -156,6 +156,25 @@ HRESULT replace_node_by_html(nsIDOMHTMLDocument *nsdoc, nsIDOMNode *nsnode, cons
return hres;
}
+nsresult get_elem_attr_value(nsIDOMHTMLElement *nselem, const WCHAR *name, nsAString *val_str, const PRUnichar **val)
+{
+ nsAString name_str;
+ nsresult nsres;
+
+ nsAString_InitDepend(&name_str, name);
+ nsAString_Init(val_str, NULL);
+ nsres = nsIDOMHTMLElement_GetAttribute(nselem, &name_str, val_str);
+ nsAString_Finish(&name_str);
+ if(NS_FAILED(nsres)) {
+ ERR("GetAttribute(%s) failed: %08x\n", debugstr_w(name), nsres);
+ nsAString_Finish(val_str);
+ return nsres;
+ }
+
+ nsAString_GetData(val_str, val);
+ return NS_OK;
+}
+
typedef struct
{
DispatchEx dispex;
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index 068c18e7201..3181ee2da1f 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -959,6 +959,8 @@ IHTMLElementCollection *create_all_collection(HTMLDOMNode*,BOOL) DECLSPEC_HIDDEN
IHTMLElementCollection *create_collection_from_nodelist(HTMLDocumentNode*,nsIDOMNodeList*) DECLSPEC_HIDDEN;
IHTMLElementCollection *create_collection_from_htmlcol(HTMLDocumentNode*,nsIDOMHTMLCollection*) DECLSPEC_HIDDEN;
+nsresult get_elem_attr_value(nsIDOMHTMLElement*,const WCHAR*,nsAString*,const PRUnichar**) DECLSPEC_HIDDEN;
+
/* commands */
typedef struct {
DWORD id;
diff --git a/dlls/mshtml/script.c b/dlls/mshtml/script.c
index 4d495879615..e5f4ab18598 100644
--- a/dlls/mshtml/script.c
+++ b/dlls/mshtml/script.c
@@ -784,7 +784,7 @@ static void parse_script_elem(ScriptHost *script_host, HTMLScriptElement *script
return;
}
}else {
- ERR("GetAttribute(event) failed: %08x\n", nsres);
+ ERR("GetEvent failed: %08x\n", nsres);
}
nsAString_Finish(&event_str);
@@ -849,7 +849,8 @@ static BOOL get_guid_from_language(LPCWSTR type, GUID *guid)
static BOOL get_script_guid(HTMLInnerWindow *window, nsIDOMHTMLScriptElement *nsscript, GUID *guid)
{
- nsAString attr_str, val_str;
+ const PRUnichar *language;
+ nsAString val_str;
BOOL ret = FALSE;
nsresult nsres;
@@ -871,26 +872,17 @@ static BOOL get_script_guid(HTMLInnerWindow *window, nsIDOMHTMLScriptElement *ns
ERR("GetType failed: %08x\n", nsres);
}
- nsAString_InitDepend(&attr_str, languageW);
- nsres = nsIDOMHTMLScriptElement_GetAttribute(nsscript, &attr_str, &val_str);
- nsAString_Finish(&attr_str);
+ nsres = get_elem_attr_value((nsIDOMHTMLElement*)nsscript, languageW, &val_str, &language);
if(NS_SUCCEEDED(nsres)) {
- const PRUnichar *language;
-
- nsAString_GetData(&val_str, &language);
-
if(*language) {
ret = get_guid_from_language(language, guid);
}else {
*guid = get_default_script_guid(window);
ret = TRUE;
}
- }else {
- ERR("GetAttribute(language) failed: %08x\n", nsres);
+ nsAString_Finish(&val_str);
}
- nsAString_Finish(&val_str);
-
return ret;
}