--- a/kernel/eka/drivers/hcr/hcr_api.cpp Thu Aug 19 11:14:22 2010 +0300
+++ b/kernel/eka/drivers/hcr/hcr_api.cpp Tue Aug 31 16:34:26 2010 +0300
@@ -34,6 +34,7 @@
// -- FUNCTIONS ---------------------------------------------------------------
+
#ifndef MAKE_DEF_FILE
namespace HCR
{
@@ -373,6 +374,9 @@
#ifndef MAKE_DEF_FILE
HCR_FUNC("HCR::GetDataTUint8");
+ if(aValue == NULL || aMaxLen == 0)
+ HCR_TRACE_RETURN(KErrArgument);
+
TInt err = GetUValueLargeSettingTUint8(aId, ETypeBinData, aMaxLen, aValue, aLen);
if (err != KErrNone)
HCR_TRACE_RETURN(err);
@@ -389,6 +393,9 @@
#ifndef MAKE_DEF_FILE
HCR_FUNC("HCR::GetDataTDes8");
+ if(aValue.MaxLength()==0)
+ HCR_TRACE_RETURN(KErrArgument);
+
TInt err = GetUValueLargeSettingTDes8(aId, ETypeBinData, aValue);
if (err != KErrNone)
HCR_TRACE_RETURN(err);
@@ -406,6 +413,9 @@
#ifndef MAKE_DEF_FILE
HCR_FUNC("HCR::GetStringTUint8");
+ if(aValue == NULL || aMaxLen == 0)
+ HCR_TRACE_RETURN(KErrArgument);
+
TInt err = GetUValueLargeSettingTUint8(aId, ETypeText8, aMaxLen, aValue, aLen);
if (err != KErrNone)
HCR_TRACE_RETURN(err);
@@ -422,6 +432,9 @@
#ifndef MAKE_DEF_FILE
HCR_FUNC("HCR::GetStringTUint8");
+ if(aValue.MaxLength() == 0)
+ HCR_TRACE_RETURN(KErrArgument);
+
TInt err = GetUValueLargeSettingTDes8(aId, ETypeText8, aValue);
if (err != KErrNone)
HCR_TRACE_RETURN(err);
@@ -438,6 +451,9 @@
#ifndef MAKE_DEF_FILE
HCR_FUNC("HCR::GetArrayTInt32");
+ if(aValue == NULL || aMaxLen == 0)
+ HCR_TRACE_RETURN(KErrArgument);
+
TInt err = GetUValueLargeSettingArray(aId, ETypeArrayInt32, aMaxLen, (TUint32*)aValue, aLen);
if (err != KErrNone)
HCR_TRACE_RETURN(err);
@@ -454,6 +470,9 @@
#ifndef MAKE_DEF_FILE
HCR_FUNC("HCR::GetArrayTUInt32");
+ if(aValue == NULL || aMaxLen == 0)
+ HCR_TRACE_RETURN(KErrArgument);
+
TInt err = GetUValueLargeSettingArray(aId, ETypeArrayUInt32, aMaxLen, aValue, aLen);
if (err != KErrNone)
HCR_TRACE_RETURN(err);
@@ -481,6 +500,21 @@
HCR_TRACE_RETURN(KErrArgument);
TInt err = KErrNone;
+
+ //Only UDEB, check is the user provided array aIds ordered?
+#ifdef _DEBUG
+ for(TInt cursor = 0; cursor < aNum - 1; cursor ++)
+ {
+ //Check the element at cursor position and one above
+ err = CompareSSettingIds(aIds[cursor], aIds[cursor+1]);
+ //if next element is less than previous one then array is not ordered.
+ //Critical error, report to user
+ if(err >= 0)
+ HCR_TRACE_RETURN(KErrArgument);
+ }
+#endif
+
+
//Don't leave while the resources are not fully allocated/deallocated
NKern::ThreadEnterCS();