aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZiyan <jaraidaniel@gmail.com>2016-09-11 14:21:50 +0200
committerAndreas Blaesius <skate4life@gmx.de>2016-09-25 18:54:54 +0200
commit301856b13822b09294c59568946b36556062157d (patch)
treef21b6d6d70cad68321ad0603c1aaf7a5dd815a18
parent9d932a7b11324537aa12d09589cc952032a5d117 (diff)
downloaddevice_samsung_espresso3g-301856b13822b09294c59568946b36556062157d.zip
device_samsung_espresso3g-301856b13822b09294c59568946b36556062157d.tar.gz
device_samsung_espresso3g-301856b13822b09294c59568946b36556062157d.tar.bz2
libsecril-shim: fix RIL_REQUEST_DIAL
The Samsung RIL crashes if uusInfo is NULL... Change-Id: I68a70b2f95ba170f97e2794ab0d318e387fa1d24
-rw-r--r--rilsrc/libsecril-shim/secril-shim.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/rilsrc/libsecril-shim/secril-shim.c b/rilsrc/libsecril-shim/secril-shim.c
index ff2e737..ad22cee 100644
--- a/rilsrc/libsecril-shim/secril-shim.c
+++ b/rilsrc/libsecril-shim/secril-shim.c
@@ -6,9 +6,38 @@ static const RIL_RadioFunctions *origRilFunctions;
/* A copy of the ril environment passed to RIL_Init. */
static const struct RIL_Env *rilEnv;
+static void onRequestDial(int request, void *data, size_t datalen, RIL_Token t) {
+ RIL_Dial *dial = malloc(sizeof(RIL_Dial));
+ RIL_UUS_Info *uusInfo = malloc(sizeof(RIL_UUS_Info));
+
+ memcpy(dial, data, datalen);
+
+ if (dial->uusInfo == NULL) {
+ memset(uusInfo, 0, sizeof(RIL_UUS_Info));
+ uusInfo->uusType = (RIL_UUS_Type) 0;
+ uusInfo->uusDcs = (RIL_UUS_DCS) 0;
+ uusInfo->uusData = NULL;
+ uusInfo->uusLength = 0;
+ dial->uusInfo = uusInfo;
+ }
+
+ origRilFunctions->onRequest(request, dial, sizeof(RIL_Dial), t);
+
+ free(uusInfo);
+ free(dial);
+}
+
static void onRequestShim(int request, void *data, size_t datalen, RIL_Token t)
{
switch (request) {
+ /* The Samsung RIL crashes if uusInfo is NULL... */
+ case RIL_REQUEST_DIAL:
+ if (datalen == sizeof(RIL_Dial) && data != NULL) {
+ onRequestDial(request, data, datalen, t);
+ return;
+ }
+ break;
+
/* Necessary; RILJ may fake this for us if we reply not supported, but we can just implement it. */
case RIL_REQUEST_GET_RADIO_CAPABILITY:
; /* lol C standard */