Revision: 18490
          http://sourceforge.net/p/edk2/code/18490
Author:   ydong10
Date:     2015-09-17 01:20:37 +0000 (Thu, 17 Sep 2015)
Log Message:
-----------
MdeModulePkg/HiiDatabase: Refine KeywordHandlerProtocol->SetData().

Update this function to follow UEFI spec requirement.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Eric Dong <[email protected]>
Reviewed-by: Liming Gao <[email protected]>

Modified Paths:
--------------
    trunk/edk2/MdeModulePkg/Universal/HiiDatabaseDxe/ConfigKeywordHandler.c

Modified: 
trunk/edk2/MdeModulePkg/Universal/HiiDatabaseDxe/ConfigKeywordHandler.c
===================================================================
--- trunk/edk2/MdeModulePkg/Universal/HiiDatabaseDxe/ConfigKeywordHandler.c     
2015-09-17 01:15:32 UTC (rev 18489)
+++ trunk/edk2/MdeModulePkg/Universal/HiiDatabaseDxe/ConfigKeywordHandler.c     
2015-09-17 01:20:37 UTC (rev 18490)
@@ -2829,6 +2829,7 @@
   BOOLEAN                             ReadOnly;
   EFI_STRING                          InternalProgress;
   CHAR16                              *TempString;
+  CHAR16                              *KeywordStartPos;
 
   if (This == NULL || Progress == NULL || ProgressErr == NULL || KeywordString 
== NULL) {
     return EFI_INVALID_PARAMETER;
@@ -2843,6 +2844,7 @@
   KeywordData     = NULL;
   ValueElement    = NULL;
   ConfigResp      = NULL;
+  KeywordStartPos = NULL;
   KeywordStringId = 0;
 
   //
@@ -2886,6 +2888,7 @@
     //
     // 3. Extract keyword from the KeywordRequest string.
     //
+    KeywordStartPos = StringPtr;
     Status = ExtractKeyword(StringPtr, &KeywordData, &NextStringPtr);
     if (EFI_ERROR (Status)) {
       //
@@ -2942,8 +2945,8 @@
     // 8. Check the readonly flag.
     //
     if (ExtractReadOnlyFromOpCode (OpCode) != ReadOnly) {
-      *ProgressErr = KEYWORD_HANDLER_INCOMPATIBLE_VALUE_DETECTED;
-      Status = EFI_INVALID_PARAMETER;
+      *ProgressErr = KEYWORD_HANDLER_ACCESS_NOT_PERMITTED;
+      Status = EFI_ACCESS_DENIED;
       goto Done;      
     }
     
@@ -2970,6 +2973,7 @@
       FreePool (ConfigResp);
       ConfigResp = NULL;
     }
+    KeywordStartPos = NULL;
   }
 
   //
@@ -2988,7 +2992,11 @@
   *ProgressErr = KEYWORD_HANDLER_NO_ERROR;
 
 Done:
-  *Progress = KeywordString + (StringPtr - TempString);
+  if (KeywordStartPos != NULL) {
+    *Progress = KeywordString + (KeywordStartPos - TempString);
+  } else {
+    *Progress = KeywordString + (StringPtr - TempString);
+  }
 
   ASSERT (TempString != NULL);
   FreePool (TempString);
@@ -3010,7 +3018,7 @@
   if (MultiConfigResp != NULL && MultiConfigResp != ConfigResp) {
     FreePool (MultiConfigResp);
   }
-  
+
   return Status;
 }
 


------------------------------------------------------------------------------
Monitor Your Dynamic Infrastructure at Any Scale With Datadog!
Get real-time metrics from all of your servers, apps and tools
in one place.
SourceForge users - Click here to start your Free Trial of Datadog now!
http://pubads.g.doubleclick.net/gampad/clk?id=241902991&iu=/4140
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits

Reply via email to