cancel
Showing results for 
Search instead for 
Did you mean: 

Possible incorrect use of getenv + strcat in SDK example

gknap
Member

Possible incorrect use of getenv + strcat in SDK example

The SDK example "datalayer.register.node" contains the following code: (line breaks added by me)

auto bfbsPath = getenv("SNAP") != nullptr
    ? strcat(getenv("SNAP"), "/sampleSchema.bfbs")
    : "bfbs/sampleSchema.bfbs";

This seems incorrect to me: strcat() modifies the buffer pointed to by its first argument, but the man page for getenv() states:

... getenv() returns a pointer to a string within the environment list. The caller must take care not to modify this string ...

Instead, I think the sample code should do something like:

const char * snapPath = getenv("SNAP");
char bfbsPath[256];
strcpy(bfbsPath, (snapPath == nullptr) ? "bfbs" : snapPath);
strcat(bfbsPath, "/sampleSchema.fbs");

Of course, it would be even better to replace strcpy/strcat with functions that check the destination buffer size.

Icon--AD-black-48x48Icon--address-consumer-data-black-48x48Icon--appointment-black-48x48Icon--back-left-black-48x48Icon--calendar-black-48x48Icon--center-alignedIcon--Checkbox-checkIcon--clock-black-48x48Icon--close-black-48x48Icon--compare-black-48x48Icon--confirmation-black-48x48Icon--dealer-details-black-48x48Icon--delete-black-48x48Icon--delivery-black-48x48Icon--down-black-48x48Icon--download-black-48x48Ic-OverlayAlertIcon--externallink-black-48x48Icon-Filledforward-right_adjustedIcon--grid-view-black-48x48IC_gd_Check-Circle170821_Icons_Community170823_Bosch_Icons170823_Bosch_Icons170821_Icons_CommunityIC-logout170821_Icons_Community170825_Bosch_Icons170821_Icons_CommunityIC-shopping-cart2170821_Icons_CommunityIC-upIC_UserIcon--imageIcon--info-i-black-48x48Icon--left-alignedIcon--Less-minimize-black-48x48Icon-FilledIcon--List-Check-grennIcon--List-Check-blackIcon--List-Cross-blackIcon--list-view-mobile-black-48x48Icon--list-view-black-48x48Icon--More-Maximize-black-48x48Icon--my-product-black-48x48Icon--newsletter-black-48x48Icon--payment-black-48x48Icon--print-black-48x48Icon--promotion-black-48x48Icon--registration-black-48x48Icon--Reset-black-48x48Icon--right-alignedshare-circle1Icon--share-black-48x48Icon--shopping-bag-black-48x48Icon-shopping-cartIcon--start-play-black-48x48Icon--store-locator-black-48x48Ic-OverlayAlertIcon--summary-black-48x48tumblrIcon-FilledvineIc-OverlayAlertwhishlist