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; }