Index: globus_gram_job_manager_staging.c
===================================================================
RCS file: /home/globdev/CVS/globus-packages/gram/jobmanager/source/globus_gram_job_manager_staging.c,v
retrieving revision 1.6
diff -u -r1.6 globus_gram_job_manager_staging.c
--- globus_gram_job_manager_staging.c	18 Apr 2005 21:39:09 -0000	1.6
+++ globus_gram_job_manager_staging.c	18 Jul 2008 16:43:57 -0000
@@ -323,14 +323,33 @@
     globus_gram_jobmanager_request_t *	request,
     FILE *				fp)
 {
-    char				buffer[8192];
+    char *                              buffer;
+    size_t                              buffer_len;
+    long                                offset;
     int					i;
     int					tmp_list_size;
     globus_gram_job_manager_staging_info_t *
 					info;
 
+
+    offset = ftell(fp);
+    if (fseek(fp, 0, SEEK_END) < 0)
+    {
+        return GLOBUS_FAILURE;
+    }
+
+    buffer_len = ftell(fp) - offset;
+
+    if (fseek(fp, offset, SEEK_SET) < 0)
+    {
+        return GLOBUS_FAILURE;
+    }
+
+    buffer = malloc(buffer_len+1);
+
     if (fscanf(fp, "%[^\n]%*c", buffer) < 1)
     {
+        free(buffer);
         return GLOBUS_FAILURE;
     }
     tmp_list_size = atoi(buffer);
@@ -345,12 +364,14 @@
 
 	if(fscanf(fp, "%[^\n]%*c", buffer) < 1)
         {
+            free(buffer);
             return GLOBUS_FAILURE;
         }
 	globus_gram_job_manager_rsl_parse_value(request, buffer, &info->from);
 
 	if(fscanf(fp, "%[^\n]%*c", buffer) < 1)
         {
+            free(buffer);
             return GLOBUS_FAILURE;
         }
 	globus_gram_job_manager_rsl_parse_value(request, buffer, &info->to);
@@ -368,6 +389,7 @@
     }
     if(fscanf(fp, "%[^\n]%*c", buffer) < 1)
     {
+        free(buffer);
         return GLOBUS_FAILURE;
     }
     tmp_list_size = atoi(buffer);
@@ -381,12 +403,14 @@
 
 	if(fscanf(fp, "%[^\n]%*c", buffer) < 1)
         {
+            free(buffer);
             return GLOBUS_FAILURE;
         }
 	globus_gram_job_manager_rsl_parse_value(request, buffer, &info->from);
 
 	if(fscanf(fp, "%[^\n]%*c", buffer) < 1)
         {
+            free(buffer);
             return GLOBUS_FAILURE;
         }
 	globus_gram_job_manager_rsl_parse_value(request, buffer, &info->to);
@@ -404,6 +428,7 @@
     }
     if(fscanf(fp, "%[^\n]%*c", buffer) < 1)
     {
+        free(buffer);
         return GLOBUS_FAILURE;
     }
     tmp_list_size = atoi(buffer);
@@ -417,12 +442,14 @@
 
 	if(fscanf(fp, "%[^\n]%*c", buffer) < 1)
         {
+            free(buffer);
             return GLOBUS_FAILURE;
         }
 	globus_gram_job_manager_rsl_parse_value(request, buffer, &info->from);
 
 	if(fscanf(fp, "%[^\n]%*c", buffer) < 1)
         {
+            free(buffer);
             return GLOBUS_FAILURE;
         }
 	globus_gram_job_manager_rsl_parse_value(request, buffer, &info->to);
@@ -438,6 +465,7 @@
 
         globus_list_insert(&request->stage_out_todo, info);
     }
+    free(buffer);
     return GLOBUS_SUCCESS;
 }
 /* globus_gram_job_manager_staging_read_state() */
Index: globus_gram_job_manager_state_file.c
===================================================================
RCS file: /home/globdev/CVS/globus-packages/gram/jobmanager/source/globus_gram_job_manager_state_file.c,v
retrieving revision 1.7.4.1
diff -u -r1.7.4.1 globus_gram_job_manager_state_file.c
--- globus_gram_job_manager_state_file.c	12 Mar 2007 14:03:17 -0000	1.7.4.1
+++ globus_gram_job_manager_state_file.c	18 Jul 2008 16:43:57 -0000
@@ -212,7 +212,8 @@
     globus_gram_jobmanager_request_t *	request)
 {
     FILE *				fp;
-    char				buffer[8192];
+    char *                              buffer = NULL;
+    size_t                              file_len;
     struct stat				statbuf;
     int					rc;
     int					i;
@@ -227,6 +228,12 @@
     {
 	return GLOBUS_GRAM_PROTOCOL_ERROR_NO_STATE_FILE;
     }
+    file_len = (size_t) statbuf.st_size;
+    buffer = malloc(file_len+1);
+    if (buffer == NULL)
+    {
+        goto error_exit;
+    }
 
     /* Try to obtain a lock on the state lock file */
     if ( request->job_state_lock_file != NULL &&
@@ -257,7 +264,7 @@
 		fp = fopen( request->job_state_file, "r" );
 		if(fp)
 		{
-		    fgets( buffer, sizeof(buffer), fp );
+		    fgets( buffer, file_len, fp );
 		    buffer[strlen(buffer)-1] = '\0';
 		    request->old_job_contact = globus_libc_strdup(buffer);
 		    fclose(fp);
@@ -273,6 +280,8 @@
 	    /* unlink here? */
 	    close( request->job_state_lock_fd );
 
+            free(buffer);
+
 	    return rc;
 	}
     }
@@ -282,29 +291,30 @@
     {
 	return GLOBUS_GRAM_PROTOCOL_ERROR_NO_STATE_FILE;
     }
-    if(fgets( buffer, sizeof(buffer), fp )  == NULL)
+
+    if(fgets( buffer, file_len, fp )  == NULL)
     {
         goto error_exit;
     }
     /* job contact string */
-    if (fgets( buffer, sizeof(buffer), fp ) == NULL)
+    if (fgets( buffer, file_len, fp ) == NULL)
     {
         goto error_exit;
     }
     request->restart_state = atoi( buffer );
-    if (fgets( buffer, sizeof(buffer), fp ) == NULL)
+    if (fgets( buffer, file_len, fp ) == NULL)
     {
         goto error_exit;
     }
     globus_gram_job_manager_request_set_status_time(request,
 		atoi( buffer ), statbuf.st_mtime);
-    if (fgets( buffer, sizeof(buffer), fp ) == NULL)
+    if (fgets( buffer, file_len, fp ) == NULL)
     {
         goto error_exit;
     }
     request->failure_code = atoi( buffer );
 
-    if(fgets( buffer, sizeof(buffer), fp ) == NULL)
+    if(fgets( buffer, file_len, fp ) == NULL)
     {
         goto error_exit;
     }
@@ -313,19 +323,19 @@
     {
 	request->job_id = globus_libc_strdup( buffer );
     }
-    if (fgets( buffer, sizeof(buffer), fp ) == NULL)
+    if (fgets( buffer, file_len, fp ) == NULL)
     {
         goto error_exit;
     }
     buffer[strlen(buffer)-1] = '\0';
     request->rsl_spec = globus_libc_strdup( buffer );
-    if (fgets( buffer, sizeof(buffer), fp ) == NULL)
+    if (fgets( buffer, file_len, fp ) == NULL)
     {
         goto error_exit;
     }
     buffer[strlen(buffer)-1] = '\0';
     request->cache_tag = globus_libc_strdup( buffer );
-    if (fgets( buffer, sizeof(buffer), fp ) == NULL)
+    if (fgets( buffer, file_len, fp ) == NULL)
     {
         goto error_exit;
     }
@@ -337,14 +347,14 @@
 	 * don't print the jobmanager_type to the state file, hence
 	 * the check above.
 	 */
-	if(fgets( buffer, sizeof(buffer), fp ) == NULL)
+	if(fgets( buffer, file_len, fp ) == NULL)
         {
             goto error_exit;
         }
 	buffer[strlen(buffer)-1] = '\0';
     }
     request->two_phase_commit = atoi(buffer);
-    if (fgets( buffer, sizeof(buffer), fp ) == NULL)
+    if (fgets( buffer, file_len, fp ) == NULL)
     {
         goto error_exit;
     }
@@ -361,7 +371,7 @@
 		"SCRATCH_DIRECTORY",
 		request->scratchdir);
     }
-    if (fgets( buffer, sizeof(buffer), fp ) == NULL)
+    if (fgets( buffer, file_len, fp ) == NULL)
     {
         goto error_exit;
     }
@@ -369,14 +379,14 @@
     sscanf(buffer, "%lu", &tmp_timestamp);
     request->seg_last_timestamp = (time_t) tmp_timestamp;
 
-    if (fgets( buffer, sizeof(buffer), fp ) == NULL)
+    if (fgets( buffer, file_len, fp ) == NULL)
     {
         goto error_exit;
     }
     buffer[strlen(buffer)-1] = '\0';
     sscanf(buffer, "%lu", &tmp_timestamp);
     request->creation_time = (time_t) tmp_timestamp;
-    if (fgets( buffer, sizeof(buffer), fp ) == NULL)
+    if (fgets( buffer, file_len, fp ) == NULL)
     {
         goto error_exit;
     }
@@ -397,9 +407,15 @@
 
     fclose(fp);
 
+    free(buffer);
+
     return GLOBUS_SUCCESS;
 error_exit:
     fclose(fp);
+    if (buffer != NULL)
+    {
+        free(buffer);
+    }
     return GLOBUS_GRAM_PROTOCOL_ERROR_READING_STATE_FILE;
 }
 

