• 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: deepak gopal <email@hidden>
  • Date: Fri, 26 Oct 2007 00:26:55 +0530 (IST)

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






      Get the freedom to save as many mails as you wish. To know how, 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

  • Follow-Ups:
    • Re: A problematic combination of malloc and getCharacters.
      • From: Aki Inoue <email@hidden>
  • Prev by Date: custom Cell tracking in NSTableView
  • Next by Date: Re: problem with NSString, UTF8, pathnames
  • Previous by thread: Re: A problematic combination of malloc and getCharacters.
  • Next by thread: Re: A problematic combination of malloc and getCharacters.
  • Index(es):
    • Date
    • Thread