• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: A problematic combination of malloc and getCharacters.
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: A problematic combination of malloc and getCharacters.


  • Subject: Re: A problematic combination of malloc and getCharacters.
  • From: Aki Inoue <email@hidden>
  • Date: Thu, 25 Oct 2007 15:56:53 -0700

I recommended -fileSystemRepresentation for the second argument of AuthorizationExecuteWithPrivileges().

So,
    AuthorizationExecuteWithPrivileges(authRef_, [shell UTF8String],
                                        0, plistArgs, NULL);
should be
AuthorizationExecuteWithPrivileges(authRef_, [shell fileSystemRepresentation], 0, plistArgs, NULL);


Also, you're allocating insufficient space for the arguments.
You're using the byte length for NSUnicodeStringEncoding where you're supposed to use the length for NSUTF8StringEncoding with decomposition in mind (which is usually much longer).


You should be able to do:

const char *plistArgs[3];

plistArgs[0] = [copyPlistScript_ UTF8String];
plistArgs[1] = [garage_ UTF8String];
plistArgs[2] = NULL;

Aki

On 2007/10/25, at 11:56, deepak gopal wrote:

Hi

I have made few changes and this is working and seems like there are no memory problems with this code.
I am not using fileSystemRepresentation because then I will end up casting constants, so using getFileSystemRepresentation instead.


  // Allocating space for the args
  char **plistArgs = (char **) malloc(3 *sizeof(char*));
  NSString *shell = @"/bin/sh";

  char *plistScript = (char *) malloc([copyPlistScript_
    lengthOfBytesUsingEncoding:NSUnicodeStringEncoding]);

// this gives space for Null.
[desktopCopyPlistScript_ getFileSystemRepresentation:plistScript
maxLength: [copyPlistScript_
lengthOfBytesUsingEncoding:NSUnicodeStringEncoding]];


  char *garage = (char *) malloc([garage_
    lengthOfBytesUsingEncoding:NSUnicodeStringEncoding]);

  [garage_ getFileSystemRepresentation:garage
                             maxLength:[garage_
    lengthOfBytesUsingEncoding:NSUnicodeStringEncoding]];

  plistArgs[0] = plistScript;
  plistArgs[1] = garage;
  plistArgs[2] = NULL;

  // Update the plists within all 3 Desktop components
  OSStatus status =
    AuthorizationExecuteWithPrivileges(authRef_, [shell UTF8String],
                                        0, plistArgs, NULL);

if ((status == errAuthorizationCanceled) ||
(status != errAuthorizationSuccess)) {
NSLog(@"Desktop Break Change: Authorization failed when installing new "
@"configuration plists.");
return NO;
}


  // free the allocated memory
  free(plistScript);
  free(garage);
  free(plistArgs);


----- Original Message ---- From: Aki Inoue <email@hidden> To: deepak gopal <email@hidden> Cc: cocoa dev <email@hidden> Sent: Wednesday, 24 October, 2007 4:15:33 PM Subject: Re: A problematic combination of malloc and getCharacters.

I believe AuthorizationExecuteWithPrivileges() is expecting NULL-
terminated, UTF-8, C-string as the args instead of non-terminated
unichar array.

You can use -UTF8String methods for that.

Since the second arg to the function is defined to be a POSIX path
representation, you should use -fileSystemRepresentation instead.

Aki

On 2007/10/24, at 15:58, deepak gopal wrote:

> Hi
>
> The method performChange would run a script which would modify a
> plist.
>
> When the control reaches line 12 I get this message "/: /: is a
> directory" in the run log and when I check in the debugger I find
> that plistScript and garage have "/" as the value. So I know where
> the problem is but dont' know what's causing it or what the solution
> is.
>
> There is no problem with the authorization or with the paths
> copyPlistScript_ (/tmp/script) or garage_ (/tmp/garage)
>
> I assume that the memory allocation in line 4 and line 6 would give
> the same result.
>
> Can someone guide me?
>
> 1 - (BOOL)performChange  {
> 2  char **plistArgs = (char **) malloc(3 *sizeof(char*));
> 3  NSString *shell = @"/bin/sh";
>
> 4  char *plistScript = (char *) malloc([copyPlistScript_
> length]*sizeof(unichar));
> 5  [copyPlistScript_ getCharacters:(unichar *) plistScript];
>
> 6  char *garage = (char *) malloc([garage_
> lengthOfBytesUsingEncoding:NSUnicodeStringEncoding]);
> 7  [garage_ getCharacters:(unichar *) garage];
>
> 8  plistArgs[0] = plistScript;
> 9  plistArgs[1] = garage;
> 10 plistArgs[2] = NULL;
>
> 12 OSStatus status = AuthorizationExecuteWithPrivileges(authRef_,
> [shell UTF8String], 0, plistArgs, NULL);
>
> 13  if ((status == errAuthorizationCanceled) || (status !=
> errAuthorizationSuccess)) {
> 14    NSLog(@"Desktop Break Change: Authorization failed when
> installing new configuration plists.");
> 15    return NO;
> 16 }
>
> 17  free(plistScript);
> 18  free(garage);
> 19 free(plistArgs);
> 20}
>
>
>
>
>      Why delete messages? Unlimited storage is just a click away. Go
> to http://help.yahoo.com/l/in/yahoo/mail/yahoomail/tools/tools-08.html
> _______________________________________________
>
> Cocoa-dev mailing list (email@hidden)
>
> Please do not post admin requests or moderator comments to the list.
> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
>
> Help/Unsubscribe/Update your Subscription:
>
> This email sent to email@hidden

_______________________________________________

Cocoa-dev mailing list (email@hidden)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden


Chat on a cool, new interface. No download required. Click here.

_______________________________________________

Cocoa-dev mailing list (email@hidden)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden


References: 
 >Re: A problematic combination of malloc and getCharacters. (From: deepak gopal <email@hidden>)

  • Prev by Date: Re: Sending a msg. to a class
  • Next by Date: [Moderator] Leopard Discussion Embargo Lifted at 6PM Pacific Time on Friday
  • Previous by thread: Re: A problematic combination of malloc and getCharacters.
  • Next by thread: NSColorWell and NSColorPanel
  • Index(es):
    • Date
    • Thread